Guardar y Exportar Documentos
Guardar y Exportar Documentos
Document.Save escribe un documento a un archivo o flujo en un formato objetivo. El formato se infiere a partir de la extensión del archivo, se proporciona explícitamente como un valor SaveFormat, o se controla mediante una subclase SaveOptions — OoxmlSaveOptions, MarkdownSaveOptions o TxtSaveOptions — para control específico del formato. Esta guía cubre las sobrecargas Save, el enum SaveFormat, opciones de guardado OOXML, exportación a Markdown y texto plano, y la detección de un formato antes de convertir.
Guardar con Document.Save
La llamada más simple, Document.Save(fileName), infiere el formato objetivo a partir de la extensión del archivo. Save(fileName, saveFormat) hace el formato explícito sin importar la extensión, y Save(fileName, saveOptions) (o las sobrecargas Stream correspondientes) acepta una subclase SaveOptions para configuraciones específicas del formato. SaveOptions.CreateSaveOptions(saveFormat) es una fábrica estática que devuelve la subclase de opciones correcta para un SaveFormat dado, con sus valores predeterminados ya establecidos.
Elegir un Formato con SaveFormat
El enum SaveFormat enumera todos los identificadores de formatos de guardado que la biblioteca reconoce. Document.Save escribe completamente tanto hacia como desde los formatos de documento principales de esta edición — DOCX, DOCM, DOTX, DOTM y Flat OPC (más sus variantes con macros y de plantilla) — así como Markdown y texto plano. FileFormatUtil.SaveFormatToExtension(saveFormat) y ExtensionToSaveFormat(extension) convierten entre el enum y una cadena de extensión de archivo.
Algunos valores de SaveFormat existen en el enum para la completitud de API, pero corresponden a formatos que esta edición reducida y de código abierto no implementa con un lector o escritor funcional — intentar guardar en uno de esos produce una salida que no es equivalente al documento original. Mantente en los formatos nombrados arriba para una ida y vuelta confiable.
Opciones OOXML: DOCX, DOCM, DOTX, DOTM y Flat OPC
OoxmlSaveOptions configura el guardado a cualquiera de los formatos Open XML. Su propiedad SaveFormat selecciona qué variante específica escribir; Password establece una contraseña de apertura en el archivo guardado (independiente de las restricciones de edición de Document.Protect); Compliance selecciona el nivel de rigor de OOXML; y CompressionLevel / Zip64Mode controlan el empaquetado subyacente de ZIP. Construya uno con new OoxmlSaveOptions(saveFormat) o a través de SaveOptions.CreateSaveOptions(saveFormat).
Exportando a Markdown
MarkdownSaveOptions controla una exportación a Markdown: ListExportMode y LinkExportMode determinan cómo se renderizan listas e hipervínculos, ImagesFolder / ImagesFolderAlias controlan dónde se escriben las imágenes extraídas y cómo se referencian, ExportImagesAsBase64 las incrusta en línea en su lugar, y TableContentAlignment afecta el marcado de tablas generado. Pase una instancia de MarkdownSaveOptions a Document.Save(fileName, saveOptions) con un nombre de archivo .md, o establezca su SaveFormat explícitamente.
Exportando a Texto sin formato
TxtSaveOptions (a través de su base TxtSaveOptionsBase, compartida con MarkdownSaveOptions) controla la exportación a texto sin formato: Encoding establece la codificación de caracteres, ParagraphBreak establece la cadena de fin de línea, MaxCharactersPerLine envuelve líneas largas, SimplifyListLabels normaliza viñetas/números de listas a caracteres simples, y PreserveTableLayout intenta mantener las columnas de tabla alineadas usando espacios.
Detectando un formato antes de convertir
Antes de convertir un archivo cuyo formato no conozca, FileFormatUtil.DetectFileFormat(fileName) devuelve un FileFormatInfo con el LoadFormat detectado. Combine esto con FileFormatUtil.LoadFormatToSaveFormat(loadFormat) para decidir si es posible un recorrido completo a través de los formatos compatibles con esta edición antes de intentar Document.Save.
Consejos y Mejores Prácticas
- Utiliza
Save(fileName, saveOptions)en lugar de la sobrecarga simple deSave(fileName, saveFormat)siempre que necesites controlar el comportamiento específico del formato, como la renderización de listas en Markdown o la compresión OOXML. - Establece
OoxmlSaveOptions.Passwordpara un archivo protegido con una contraseña abierta; eso es independiente deDocument.Protect, que restringe la edición pero no cifra el archivo. - Elige
MarkdownSaveOptions.ExportImagesAsBase64para un único archivo Markdown autocontenido, oImagesFoldercuando quieras una carpeta con los archivos de imagen extraídos junto al Markdown. - Llama a
SaveOptions.CreateSaveOptions(saveFormat)en lugar de seleccionar manualmente la clase de opciones concreta cuando el formato de destino se determina en tiempo de ejecución. - Verifica un formato de destino con
FileFormatUtilantes de la conversión en lugar de confiar en una simple extensión de archivo, que puede ser incorrecta o engañosa.
Problemas comunes
| Problema | Causa | Solución |
|---|---|---|
Save(fileName) selecciona el formato incorrecto | La extensión del archivo no coincide con el formato previsto | Utilice Save(fileName, saveFormat) o Save(fileName, saveOptions) para hacer explícito el formato |
| El archivo OOXML guardado no se abre con una contraseña | OoxmlSaveOptions.Password no se estableció antes de guardar | Construye un OoxmlSaveOptions, establece Password y pásalo a Save |
| La exportación a Markdown dispersa archivos de imagen inesperadamente | El comportamiento predeterminado de MarkdownSaveOptions extrae imágenes a archivos | Configura ExportImagesAsBase64 = true para un único archivo autónomo, o configura ImagesFolder para controlar dónde van las imágenes |
| La exportación a texto plano pierde la alineación de columnas de la tabla | TxtSaveOptions.PreserveTableLayout se deja en su valor predeterminado | Establezca PreserveTableLayout = true antes de guardar |
FAQ
¿Cómo guardo un documento en un formato específico sin importar su extensión de archivo?
Llame a Save(fileName, saveFormat) con un valor SaveFormat explícito, o Save(fileName, saveOptions) con una subclase SaveOptions coincidente.
¿Qué formatos lee y escribe esta edición en ambas direcciones?
DOCX, DOCM, DOTX, DOTM, Flat OPC (más sus variantes con macros y de plantilla), Markdown y texto plano.
¿Cómo protejo con contraseña un archivo guardado?
Establezca Password en una instancia de OoxmlSaveOptions y pásela a Document.Save(fileName, saveOptions).
¿Cómo controlo los finales de línea en un archivo de texto exportado?
Establezca ParagraphBreak en una instancia de TxtSaveOptions antes de guardar.
¿Cómo verifico qué formato tiene un archivo antes de convertirlo?
Llame a FileFormatUtil.DetectFileFormat(fileName) y lea el FileFormatInfo.LoadFormat devuelto.
API Reference Resumen
| Clase/Método | Descripción |
|---|---|
Document.Save | Escribe el documento en un archivo, flujo o destino de salida en un formato elegido. |
SaveFormat | Enum que identifica el formato de destino para una operación de guardado. |
SaveOptions | Clase base abstracta para la configuración de guardado específica de formato; CreateSaveOptions(saveFormat) devuelve la subclase correspondiente. |
OoxmlSaveOptions | Opciones para DOCX, DOCM, DOTX, DOTM y Flat OPC — contraseña, cumplimiento, compresión. |
MarkdownSaveOptions | Opciones para la exportación de Markdown — renderizado de listas/enlaces, manejo de imágenes. |
TxtSaveOptions / TxtSaveOptionsBase | Opciones para la exportación de texto sin formato — codificación, saltos de línea, diseño de tablas. |
FileFormatUtil.DetectFileFormat | Detecta el formato de un archivo antes de cargarlo o convertirlo. |
FileFormatUtil.SaveFormatToExtension / ExtensionToSaveFormat | Convierte entre un valor SaveFormat y una extensión de archivo. |