Всем привет, в этой статье я покажу, как с помощью Excel можно формировать JS массивы на основе таблиц... Звучит как бред, однако в дальнейшем можно сохранить массив в js файл, изменить расширение файла на DB и полученную "базу данных" подключать к простой веб странице, можно использовать в Android приложении или расширении для браузера. Меняя содержимое файла можно изменять данные не затрагивая html код, и тут пригодится Excel, который возьмет на себя перевод данных из таблицы в массив. Разбор из файла в JSON будет происходить в веб странице.

Смотрите видео: База данных из JavaScript для веб страницы из Excel на VBA модуле.

Итак, сохраним книгу Excel с поддержкой макросов, работать будем с двумя листами, tab - таблица и test - лист с кнопкой и готовым результатом. В редакторе VBA добавим новый модуль, и внесем в него следующий код:

Sub main()
Dim myCol, myRow As Integer
Dim name1, name2 As String
Dim namval

myRow = 4 'строки
myCol = 2 'столбцы

name1 = "name"
name2 = "age"

namval = Sheets("tab").Range(Sheets("tab").Cells(1, 1), Sheets("tab").Cells(myRow, myCol))
For j = 1 To myRow
Sheets("test").Cells(j, 1) = "{" & Chr(34) & name1 & Chr(34) & ":" & Chr(34) & namval(j, 1) & Chr(34) & "," & Chr(34) & name2 & Chr(34) & ":" & namval(j, 2) & "},"
If j = myRow Then
Sheets("test").Cells(j, 1) = "{" & Chr(34) & name1 & Chr(34) & ":" & Chr(34) & namval(j, 1) & Chr(34) & "," & Chr(34) & name2 & Chr(34) & ":" & namval(j, 2) & "}"
End If
Next j

myRow = WorksheetFunction.CountA(Sheets("tab").Range("A:A")) 'строки
myCol = WorksheetFunction.CountA(Sheets("tab").Range("A1:AAA1")) 'столбцы

MsgBox "строки: " & myRow & " столбцы " & myCol

End Sub

Привяжем кнопку к модулю и нажмем на нее. Полученные данные вставим в текстовый файл с текстом

var arr = [
//ваши данные
]; 

между кавычками. Файл сохраняем как JS, но с расширением db.

В секции head веб страницы(я ипользовал bootstrap шаблон), добавим "базу данных" как если бы это был скрипт. Прим: при использовании уберите пробел перед левой кавычкой!

< script src="/test.db">< /script>

В секции body опишем таблицу для вывода данных и script, который будет формировать строки и столбцы на странице. Прим: при использовании уберите пробел перед левой кавычкой!

< table class="table">
< thead>
< tr>
< th scope="col">Имя</th>
< th scope="col">Возраст</th>
< /tr>
< /thead>
< tbody>
< script>
for(x=0;x < arr.length;x++){
var serializedUser = JSON.stringify(arr[x]);
var user = JSON.parse(serializedUser);
document.write("< tr>< td>" + user.name + "< /td>< td>" + user.age + "< /td>< /tr>");
}
< /script>
< /tbody>< /table>

При запуске html страницы будет отображена таблица: заголовок Имя и Возраст и данные name и age.

Первый VBA модуль обладает одним недостатком: имена полей приходится указывать в коде и самих полей только два, данные начинаются с первой строки. Вторая версия модуля сама определяет имена полей и их количество, "шапка" таблицы в первой строке, данные начинаются со второй строки. Сделайте копии листов tab, test сохранив как tab2, test2, добавьте новый модуль, вставьте в него следующий код и присвойте кнопке Module2.

Sub main2()
Dim myCol, myRow, namCount As Integer
Dim name1, name2 As String
Dim namval, nam
Dim str0, str1, str2, str3, str4, mStr
str0 = "{" & Chr(34)
str1 = Chr(34) & ":" & Chr(34)
str2 = Chr(34) & "," & Chr(34)
str3 = "},"
str4 = "}"

'myRow = 5 'строки
'myCol = 2 'столбцы
myRow = WorksheetFunction.CountA(Sheets("tab2").Range("A:A")) 'строки
myCol = WorksheetFunction.CountA(Sheets("tab2").Range("A1:AAA1")) 'столбцы
namCount = WorksheetFunction.CountA(Sheets("tab2").Range("A1:N1")) 'количество столбцов
namval = Sheets("tab2").Range(Sheets("tab2").Cells(2, 1), Sheets("tab2").Cells(myRow, myCol)) 'значения таблицы
nam = Sheets("tab2").Range("A1:N1") 'шапка

For j = 2 To myRow
mStr = str0
For i = 1 To namCount
mStr = mStr & nam(1, i) & str1 & namval(j - 1, i) & str2
Next i

mStr = Left(mStr, Len(mStr) - 2)
mStr = mStr & str3
Sheets("test2").Cells(j - 1, 1) = mStr

If j = myRow Then
mStr = str0
For i = 1 To namCount
mStr = mStr & nam(1, i) & str1 & namval(j - 1, i) & str2
Next i

mStr = Left(mStr, Len(mStr) - 2)
mStr = mStr & str4
Sheets("test2").Cells(j - 1, 1) = mStr

End If
Next j

End Sub 

Данный код модуля позволяет автоматически определять количество строк и столбцов, названия заголовков шапки таблицы, которые будут впоследствии использованы для получаения данных. При этом код в html стрнице нормально работает и с русскими буквами: user.name и user.Имя распознаются одинаково.

На что еще хочу обратить внимание это кодировка страницы и файла "базы данных", они должны быть одинаковые, например UTF-8, для страницы указываем charset=utf8, а файл test.db сохраняем в Notepad++, иначе вместо текста получатся "кракозябры"....

Смотрите видео: База данных из JavaScript для веб страницы из Excel на VBA модуле.


Понравилась статья? Поделитесь ею с друзьями и напишите отзыв в комментариях!


Связанные статьи

Предыдущие статьи


Cookies make it easier for us to provide you with our services. With the usage of our services you permit us to use cookies.
Ok