Pregunta

Antecedentes: tenemos una aplicación que genera informes desde HTML (que puede tener o no secuencias de comandos en línea). La fuente HTML normalmente se almacena como un blob en la base de datos.

Ahora existe la necesidad de codificar un informe en particular en la aplicación (es decir, para que no dependa de la base de datos). Primero lo probé por la fuerza bruta (cortando y pegando todo el informe en una cadena constante y agregando una gran cantidad de & amp; vbNewLine & amp; _ ; eso no funcionó porque parece que ser un límite para la cantidad de & amp; _ que se puede usar. Pensé en comprimir todo en (más o menos) una sola línea, pero eso no solo perjudicaría la legibilidad, sino que tampoco trabajar para la secuencia de comandos en línea.

Algo se me ocurrió mientras escribía esto: podría abrir el archivo (que contiene el código HTML que quiero codificar) mediante programación y escribir el contenido del archivo en una cadena. Voy a intentarlo ahora ...

¿Alguien puede sugerir una forma mejor / más elegante de hacer esto?

¿Fue útil?

Solución 3

Terminé incrustando el archivo HTML en un archivo de recursos (res) y cargándolo desde allí usando LoadResData. Hice otra pregunta relacionada con la carga de archivos HTML desde archivos res ( y obtuve una respuesta bastante buena también). Tenga en cuenta que otra opción podría ser incrustar el HTML (o cualquier otro archivo de texto) como un recurso personalizado; de esta manera, podrá hacer referencia al recurso por nombre (es decir, el nombre del Recurso personalizado) cuando use LoadResData en lugar de un número (lo que puede no significar demasiado para alguien que viene y trata de entender su código). Tenga en cuenta también que si desea cargar el HTML en una cadena (como lo hago yo), deberá llamar a StrConv en el resultado devuelto por LoadResData (LoadResData devuelve una matriz de bytes).

Otros consejos

Puede leer cada línea del archivo y agregarla a medida que avanza. Alternativamente, puede usar una clase StringBuilder. Debería escribir esta clase o copiarla desde algún lugar like esto . Hacer las cosas de esta manera también tiene potencial para mejorar el rendimiento.

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

Si ese es el camino que debe seguir, piense en usar la cadena html como una plantilla con marcadores de posición como @@ var1 @@ en la cadena que luego puede reemplazar con los valores dinámicos reales en lugar de intentar generar el resultado final en línea, debería ser mucho más fácil depurar problemas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top