Salvando e Exportando Documentos
Salvando e Exportando Documentos
Document.Save grava um documento em um arquivo ou fluxo em um formato-alvo. O formato pode ser deduzido a partir da extensão do arquivo, especificado explicitamente como um valor SaveFormat, ou controlado por uma subclasse SaveOptions — OoxmlSaveOptions, MarkdownSaveOptions ou TxtSaveOptions — para ajuste específico ao tipo. Este guia aborda as sobrecargas Save, o enum SaveFormat, opções de salvamento OOXML, exportação para Markdown e texto simples, além da detecção de um formato antes da conversão.
Salvando com Document.Save
A chamada mais simples, Document.Save(fileName), deduz o formato-alvo a partir da extensão do arquivo. Save(fileName, saveFormat) define o formato explicitamente, independentemente da extensão, e Save(fileName, saveOptions) (ou as sobrecargas correspondentes Stream) aceita uma subclasse SaveOptions para configurações específicas ao formato. SaveOptions.CreateSaveOptions(saveFormat) é uma fábrica estática que devolve a subclasse de opções correta para um determinado SaveFormat, já com seus valores padrão configurados.
Escolhendo um Formato com SaveFormat
O enum SaveFormat enumera todos os identificadores de formatos de salvamento reconhecidos pela biblioteca. Document.Save grava integralmente tanto para quanto a partir dos formatos de documento principais desta edição — DOCX, DOCM, DOTX, DOTM e Flat OPC (incluindo suas variantes com macros e de modelo) — além de Markdown e texto simples. FileFormatUtil.SaveFormatToExtension(saveFormat) e ExtensionToSaveFormat(extension) convertem entre o enum e uma string de extensão de arquivo.
Alguns valores de SaveFormat estão presentes no enum para garantir a completude de API, mas correspondem a formatos que esta edição reduzida e de código aberto não implementa nem leitor nem gravador funcional — tentar salvar em um desses gera um resultado que não equivale ao documento original. Use apenas os formatos citados acima para garantir uma conversão confiável.
Opções OOXML: DOCX, DOCM, DOTX, DOTM e Flat OPC
OoxmlSaveOptions configura a gravação em qualquer um dos formatos Open XML. Sua propriedade SaveFormat define qual variante específica será escrita; Password define uma senha de abertura para o arquivo salvo (independente das restrições de edição de Document.Protect); Compliance escolhe o nível de rigor do OOXML; e CompressionLevel / Zip64Mode controlam o empacotamento ZIP subjacente. Crie um com new OoxmlSaveOptions(saveFormat) ou via SaveOptions.CreateSaveOptions(saveFormat).
Exportando para Markdown
MarkdownSaveOptions controla a exportação para Markdown: ListExportMode e LinkExportMode definem como listas e hyperlinks são renderizados, ImagesFolder / ImagesFolderAlias determinam onde as imagens extraídas são gravadas e como são referenciadas, ExportImagesAsBase64 as incorpora em linha, e TableContentAlignment influencia a marcação de tabelas gerada. Passe uma instância de MarkdownSaveOptions para Document.Save(fileName, saveOptions) com um nome de arquivo .md, ou configure seu SaveFormat explicitamente.
Exportando para Texto Simples
TxtSaveOptions (por meio de seu TxtSaveOptionsBase base, compartilhado com MarkdownSaveOptions) controla a exportação de texto simples: Encoding define a codificação de caracteres, ParagraphBreak define a sequência de terminação de linha, MaxCharactersPerLine quebra linhas longas, SimplifyListLabels normaliza marcadores/números de listas para caracteres simples, e PreserveTableLayout tenta manter as colunas das tabelas alinhadas usando espaços.
Detectando um Formato Antes de Converter
Antes de converter um arquivo cujo formato você ainda não conhece, FileFormatUtil.DetectFileFormat(fileName) devolve um FileFormatInfo contendo o LoadFormat detectado. Combine isso com FileFormatUtil.LoadFormatToSaveFormat(loadFormat) para decidir se é viável fazer um percurso completo pelos formatos suportados nesta edição antes de tentar Document.Save.
Dicas e Melhores Práticas
- Use
Save(fileName, saveOptions)em vez da sobrecarga simplesSave(fileName, saveFormat)sempre que precisar controlar o comportamento específico de formato, como renderização de listas Markdown ou compressão OOXML. - Defina
OoxmlSaveOptions.Passwordpara um arquivo protegido por senha aberta; isso é separado deDocument.Protect, que restringe a edição mas não criptografa o arquivo. - Escolha
MarkdownSaveOptions.ExportImagesAsBase64para um único arquivo Markdown autônomo, ouImagesFolderquando desejar uma pasta com arquivos de imagem extraídos ao lado do Markdown. - Chame
SaveOptions.CreateSaveOptions(saveFormat)em vez de selecionar manualmente a classe de opções concreta quando o formato de destino é determinado em tempo de execução. - Verifique um formato de destino com
FileFormatUtilantes da conversão, em vez de confiar apenas na extensão do arquivo, que pode estar errada ou ser enganosa.
Problemas Comuns
| Problema | Causa | Correção |
|---|---|---|
Save(fileName) seleciona o formato incorreto | A extensão do arquivo não corresponde ao formato desejado | Use Save(fileName, saveFormat) ou Save(fileName, saveOptions) para tornar o formato explícito |
| O arquivo OOXML salvo não abre com senha | OoxmlSaveOptions.Password não foi definido antes de salvar | Construa um OoxmlSaveOptions, defina Password e passe-o para Save |
| A exportação Markdown espalha arquivos de imagem inesperadamente | O comportamento padrão de MarkdownSaveOptions extrai imagens para arquivos | Defina ExportImagesAsBase64 = true para um único arquivo autônomo, ou defina ImagesFolder para controlar onde as imagens vão |
| A exportação em texto puro perde o alinhamento das colunas da tabela | TxtSaveOptions.PreserveTableLayout permanece no padrão | Defina PreserveTableLayout = true antes de salvar |
FAQ
Como salvo um documento em um formato específico independentemente da sua extensão de arquivo?
Chame Save(fileName, saveFormat) com um valor SaveFormat explícito, ou Save(fileName, saveOptions) com uma subclasse SaveOptions correspondente.
Quais formatos esta edição lê e grava em ambas as direções?
DOCX, DOCM, DOTX, DOTM, Flat OPC (com suas variantes habilitadas para macro e de modelo), Markdown e texto simples.
Como protejo um arquivo salvo com senha?
Defina Password em uma instância OoxmlSaveOptions e passe-a para Document.Save(fileName, saveOptions).
Como controlo as terminações de linha em um arquivo de texto exportado?
Defina ParagraphBreak em uma instância TxtSaveOptions antes de salvar.
Como verifico qual é o formato de um arquivo antes de convertê-lo?
Chame FileFormatUtil.DetectFileFormat(fileName) e leia o FileFormatInfo.LoadFormat retornado.
API Reference Resumo
| Classe/Método | Descrição |
|---|---|
Document.Save | Grava o documento em um arquivo, fluxo ou destino de saída em um formato escolhido. |
SaveFormat | Enum que identifica o formato alvo para uma operação de gravação. |
SaveOptions | Classe base abstrata para configuração de gravação específica de formato; CreateSaveOptions(saveFormat) devolve a subclasse correspondente. |
OoxmlSaveOptions | Opções para DOCX, DOCM, DOTX, DOTM e Flat OPC — senha, conformidade, compressão. |
MarkdownSaveOptions | Opções para exportação Markdown — renderização de listas/links, tratamento de imagens. |
TxtSaveOptions / TxtSaveOptionsBase | Opções para exportação de texto puro — codificação, quebras de linha, layout de tabelas. |
FileFormatUtil.DetectFileFormat | Detecta o formato de um arquivo antes de carregá-lo ou convertê-lo. |
FileFormatUtil.SaveFormatToExtension / ExtensionToSaveFormat | Converte entre um valor SaveFormat e uma extensão de arquivo. |