Всем привет, в этой статье я покажу, как с помощью 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 модуле.


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


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

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


We use cookies on our website. Some of them are essential for the operation of the site, while others help us to improve this site and the user experience (tracking cookies).

You can decide for yourself whether you want to allow cookies or not. Please note that if you reject them, you may not be able to use all the functionalities of the site.

Ok