web-dev-qa-db-fra.com

Créer, insérer du texte et enregistrer un document Word en C #

J'ai trouvé beaucoup de documentation utile sur la création d'une instance d'un document Word, l'insertion de toutes sortes de texte et de mise en forme, mais je ne trouve nulle part quelque chose pour enregistrer un document qui n'a pas déjà été créé et ouvert par programme.

Essentiellement, je veux créer un fichier docx et le remplir de texte à partir d'une zone de texte riche. En utilisant le code que j'ai trouvé à Comment insérer du texte à la fin du document Je peux y parvenir si je crée d'abord un document. Mais malgré les suggestions d'utilisation de _document.SaveAs () (qui n'existe pas - version diff je suppose) ou .Save () supposément avec une boîte de dialogue SaveAs si le fichier n'existe pas déjà, j'obtiens toujours une erreur de non-correspondance de type. Voici donc le code de travail si je pré-crée le fichier à utiliser:

OpenFileDialog SDO = new OpenFileDialog();
SDO.ShowDialog();

Microsoft.Office.Interop.Word._Application oWord;
object oMissing = Type.Missing;
oWord = new Microsoft.Office.Interop.Word.Application();
oWord.Visible = false;

oWord.Documents.Open(SDO.FileName);

oWord.Selection.TypeText(richTextBox1.Text);
oWord.ActiveDocument.Save();
oWord.Quit();

Maintenant, on pourrait supposer que la suppression des lignes pour les documents OpenFileDialogue.Open contribuerait dans une certaine mesure à enregistrer un nouveau fichier créé en C #, même avec:

Microsoft.Office.Interop.Word._Application oWord;
object oMissing = Type.Missing;
oWord = new Microsoft.Office.Interop.Word.Application();
oWord.Visible = false;

SaveFileDialog SD = new SaveFileDialog();

SD.Filter = "Word File |*.docx";
SD.Title = "Save File";
SD.ShowDialog();


oWord.Documents.Save(SD.FileName,WdNewDocumentType.wdNewXMLDocument);

oWord.Selection.TypeText(richTextBox1.Text);
oWord.ActiveDocument.Save();
oWord.Quit();

J'ai vu d'autres exemples ouvrir le document afin que vous puissiez le sauvegarder vous-même, mais j'ai besoin de le sauvegarder sans aucune intervention humaine autre que le choix d'un nom de fichier.

Toute aide appréciée, également l'option de dll tiers comme spire et gem est exclue, donc pas une option :(

Si quelqu'un a un exemple simple de création et d'enregistrement d'un document Word qui n'existait pas avant l'exécution du programme, je serais très obligé.

6
Dan

La documentation Microsoft MSDN contient des tonnes de guides et d'exemples utiles.

Vous allez vouloir inclure:

using Word = Microsoft.Office.Interop.Word;
using Microsoft.Office.Tools.Word;

Déclarez ensuite votre candidature:

Word.Application app = new Word.Application();

Déclarez votre nouveau document:

Word.Document doc = app.Documents.Add();

Ajoutez du texte à votre documnet

Il existe deux façons de sauvegarder ces documents:

par programme

tilisation d'une boîte de dialogue d'enregistrement de fichier

7
Bender Bending

C'est ainsi que je le fais.

app = new Word.Application();

object oMissing = System.Reflection.Missing.Value;
Word._Document oDoc = app.Documents.Add(ref oMissing, ref oMissing,
ref oMissing, ref oMissing);

.....

app.ActiveDocument.SaveAs2(fileName);

Où nom de fichier est le nom de fichier que je souhaite. Lorsque je faisais cela à l'origine, j'ai découvert qu'il y avait beaucoup de fonctions non documentées (et donc non prises en charge). SaveAs2 est l'un d'entre eux! Mais, il fonctionne.

2
Jonathan Willcock