Всем привет, в этой статье я покажу, как с помощью Excel можно формировать JS массивы на основе таблиц... Звучит как бред, однако в дальнейшем можно сохранить массив в js файл, изменить расширение файла на DB и полученную "базу данных" подключать к простой веб странице, можно использовать в Android приложении или расширении для браузера. Меняя содержимое файла можно изменять данные не затрагивая html код, и тут пригодится Excel, который возьмет на себя перевод данных из таблицы в массив. Разбор из файла в JSON будет происходить в веб странице.
База данных из JavaScript для веб страницы из Excel на VBA модуле
База данных из JavaScript для веб страницы из Excel на VBA модуле
База данных из 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 модуле
Рекомендуем смотреть видео в полноэкранном режиме, в настойках качества выбирайте 1080 HD, не забывайте подписываться на канал в YouTube, там Вы найдете много интересного видео, которое выходит достаточно часто. Приятного просмотра!
С уважением, авторы сайта Компьютерапия
Понравилось? Поделись этим видео с друзьями!
База данных из JavaScript для веб страницы из Excel на VBA модуле
Рекомендуем смотреть видео в полноэкранном режиме, в настойках качества выбирайте 1080 HD, не забывайте подписываться на видео ВКонтакте, там Вы найдете много интересного, которое выходит достаточно часто. Приятного просмотра!
С уважением, авторы сайта Компьютерапия
Понравилось? Поделись этим видео с друзьями!
База данных из JavaScript для веб страницы из Excel на VBA модуле
Рекомендуем смотреть видео в полноэкранном режиме, в настойках качества выбирайте 1080 HD, не забывайте подписываться на канал в Рутубе, там Вы найдете много интересного, которое выходит достаточно часто. Приятного просмотра!
С уважением, авторы сайта Компьютерапия
Понравилось? Поделись этим видео с друзьями!