Фон: у нас есть приложение, которое генерирует отчеты из HTML (которое может иметь или не иметь встроенные скрипты). Источник HTML обычно хранится в базе данных в виде большого двоичного объекта.
Теперь необходимо жестко встроить конкретный отчет в приложение (т.е. чтобы он не зависел от базы данных). Сначала я попробовал это методом грубой силы (вырезание и вставка всего отчета в строку const и добавление к нему большого количества & vbNewLine & _; это не сработало, потому что, похоже, существует ограничение на количество & _, которое можно использовать Я думал сжать все в (более или менее) одну строку, но это не только ухудшило бы удобочитаемость, но и не сработало бы для встроенных сценариев.
Что-то пришло мне в голову, когда я писал это: я мог программно открыть файл (содержащий HTML-код, который я хочу жестко запрограммировать) и записать содержимое файла в строку. Я попробую сейчас ...
Может ли кто-нибудь предложить лучший / более элегантный способ сделать это?






Если это ваш путь, подумайте об использовании строки html в качестве шаблона с заполнителями, такими как @@ var1 @@ в строке, которую вы затем можете заменить фактическими динамическими значениями, а не пытаться сгенерировать окончательный вывод в строке, следует будет намного проще отлаживать проблемы.
Вы можете читать каждую строку файла и добавлять ее по мере необходимости. В качестве альтернативы вы можете использовать класс 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-файл в файл ресурсов (res) и загрузил его оттуда с помощью LoadResData. Я спросил еще один вопрос, связанный с загрузкой файлов HTML из файлов res (и тоже получил довольно хороший ответ). Обратите внимание, что другим вариантом может быть встраивание HTML (или любого другого текстового файла) в качестве настраиваемого ресурса; таким образом вы сможете ссылаться на ресурс по имени (т.е. имени настраиваемого ресурса) при использовании LoadResData, а не числа (что может не иметь большого значения для тех, кто приходит и пытается понять ваш код). Также обратите внимание, что если вы хотите загрузить HTML в строку (как это делаю я), вам нужно будет вызвать StrConv для результата, возвращаемого LoadResData (LoadResData возвращает массив байтов).