Вопрос

Фон : у нас есть приложение, которое генерирует отчеты из HTML (которые могут иметь или не иметь встроенные сценарии). Источник HTML обычно хранится в виде блоба в базе данных.

Теперь необходимо жестко закодировать конкретный отчет в приложение (т. е. чтобы он не зависел от базы данных). Сначала я попробовал это методом грубой силы (вырезая и вставляя весь отчет в константную строку и добавляя к нему много & amp; vbNewLine & amp; _ ; это не сработало, потому что быть ограниченным числом & amp; _ , которое можно использовать. Я думал о сжатии всего в (более или менее) одну строку, но это не только ухудшит читабельность, но и не повредит работать для встроенных сценариев.

Что-то со мной произошло, когда я писал это: я мог открыть файл (содержащий HTML-код, который я хочу жестко закодировать) программно и записать содержимое файла в строку. Я сейчас попробую ...

Кто-нибудь может предложить лучший / более элегантный способ сделать это?

Это было полезно?

Решение 3

Я закончил встраивать HTML-файл в файл ресурсов (res) и загружать его оттуда с помощью LoadResData. Я задал еще один вопрос , касающийся загрузки файлов HTML из файлов res ( и получил довольно хороший ответ тоже). Обратите внимание, что другим вариантом может быть внедрение HTML (или любого другого текстового файла) в качестве пользовательского ресурса; таким образом вы сможете ссылаться на ресурс по имени (то есть по имени пользовательского ресурса) при использовании LoadResData, а не по номеру (что может не слишком много значить для того, кто приходит и пытается понять ваш код). Также обратите внимание, что если вы хотите загрузить HTML в строку (как я), вам нужно вызвать StrConv для результата, возвращаемого LoadResData (LoadResData возвращает массив байтов).

Другие советы

Вы можете прочитать каждую строку файла и добавлять ее по мере необходимости. В качестве альтернативы вы можете использовать класс StringBuilder. Вам нужно будет написать этот класс или скопировать его откуда-то как это . Подобные действия также могут улучшить производительность.

Dim oSB as CStringBuilder
Dim sHtml as String

Set oSB = new CStringBuilder
With oSB
  Call .Append("Some HTML here")
  Call .Append("Some more HTML here")
  ' etc...
  sHtml = .ToString()
End With

Set oSB = Nothing

Если вы идете по этому пути, подумайте об использовании строки html в качестве шаблона с заполнителями, такими как @@ var1 @@ в строке, которые затем можно заменить действительными динамическими значениями, а не пытаться сгенерировать окончательный результат. встроенный, должно быть намного проще для устранения проблем.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top