DCOM-Konfigurationseinstellungen für Microsoft Interop-Word-Automatisierung

Ich bin mit Microsoft Office Interop Word zum erstellen von Dokumenten mithilfe von C#. In Reihenfolge für die Generierung des Dokuments zu arbeiten, es sollte einen Eintrag für die "Microsoft Office Word 97 - 2003 Document" unter der Dcom Config Settings wie unten gezeigt:

DCOM-Konfigurationseinstellungen für Microsoft Interop-Word-Automatisierung

Den Local Path unter der General Tab hat einen richtigen Weg, wenn Sie Microsoft Office zum ersten mal installiert. Wenn ich dann den Beitritt des Computers zu einer Domäne, und starten Sie das system mit einem Domain-Benutzer, die Local Path leer wird und die Anwendung nicht erzeugen die Dokumente und gibt Fehler.

Selbst wenn ich den Beitritt des Computers zur Domäne zuerst und dann die Anmeldung mit Domänen-Benutzer und installieren Sie dann die Microsoft Office, die Local Path richtig angezeigt wird und erst dann nach einem Neustart, es wird wieder blank. Während Sie zur gleichen Zeit, wenn ich die Anmeldung mit der Local User, die Path ist immer noch da.

Was die Ursache der Wert von Local Path leer zu fahren?

Diese ganze setup ist auf virtuellen Maschinen und die word-automation arbeitet auf einem Domäne-Konto, wie ich gesehen habe, es funktioniert auf einem physischen Computer Mitglied der Domäne.

UPDATE: What my application is doing:

Gibt es 4-5 Komponenten in der Anwendung.

Das erste ist ein VSTO Word Add-in, integriert mit Microsoft Word, wo wir neue Dokumente erstellen, die enthalten einige Ausdrücke, die auch in der Datenbank gespeichert. Es gibt auch Bedingungen, auf die die Ausdrücke und Sie können verschachtelt werden, auch. Die Ausdrücke enthalten schema-Elemente aus den XSD-Dateien sind gespeichert in der Datenbank. Sobald diese Art von Dokument erstellt wird, wird seine WordML ist in der Datenbank gespeichert. Dies alles geschieht in VSTO AddIn.

Das zweite ist ein Web-Dienst, erhält eine xml-Eingabe von einer anderen Komponente, die bestätigt, dass die XSD-vor, aus denen der schema-Elemente waren eingebettet in die Ausdrücke im Dokument erstellt durch VSTO-addIn. Dieser web-service-checks für die Validierungen und eine Reihe anderer Aufgaben. Es bekommt dann die WordML das entsprechende word-Dokument aus der Datenbank und übergibt Sie an das Word-Interop-die Verwendung von APIs, durchläuft es rekursiv zu ersetzen, die der schema-Elemente mit den tatsächlichen Werten aus der Eingabe-xml an. Dieser speichert dann die von WordML zu einer Datei als word-Dokument.

Dies legt auch eine Vorlage, um das Dokument, bevor Sie es speichern. Es verwendet die SaveAs-Funktion von Word Interop, um auch speichern Sie die Datei als PDF.

UPDATE:
Ich habe auch wieder mitgemacht meine Bewerbung vollständig und kam zu wissen, dass tun wir alle Dinge, die durch das Parsen der Office Open XML (z.B. für die Fütterung der Eingang in das word-Dokument), aber nur die Dinge, die wir tun, mithilfe von Word Automation sind folgende:

  1. Über Word-Interop zum speichern der generierten WordML als eines der Word-Dateien im Format.
  2. Export der generierten WordML, um die PDF-Datei.
  3. Die Zusammenlegung mehrerer WordMLs in einem einzigen word-Dokument-Datei.
  4. Abrufen der XML für it.

Alle diese vier codes werden unten mit nur die relevanten Teile des Codes:

Microsoft.Office.Interop.Word.Document wordDocument = null;
object templateName = "templateFile.dotm";
wordDocument = this.WordApplication.Documents.Add(ref missing, ref missing, ref missing, ref missing);
wordDocument.Range(ref missing, ref missing).Text = "";
wordDocument.set_AttachedTemplate(ref templateName);

wordDocument = this.WordApplication.Documents.Open(
                   ref objSourceFilePath, ref oFalse, ref oTrue,
                   ref oMissing, ref oMissing, ref oMissing,
                   ref oMissing, ref oMissing, ref oMissing,
                   ref oMissing, ref oMissing, ref oMissing,
                   ref oMissing, ref oMissing, ref oMissing,
                   ref oMissing);
wordDocument.ExportAsFixedFormat(
        strTargetPath,
        targetFormat,
        paramOpenAfterExport,
        paramExportOptimizeFor,
        paramExportRange,
        paramStartPage,
        paramEndPage,
        paramExportItem,
        paramIncludeDocProps,
        paramKeepIRM,
        paramCreateBookmarks,
        paramDocStructureTags,
        paramBitmapMissingFonts,
        paramUseISO19005_1,
        ref oMissing);

object SaveToFormat = SaveToFormat = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatDocument97;
wordDocument.SaveAs(ref objTargetFilePath, ref SaveToFormat, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);

Für das Zusammenführen mehrerer Dateien:

Microsoft.Office.Interop.Word.Document doc = null;
Microsoft.Office.Interop.Word.Section section = null;
object sectionBreakNextPage = (object)WdBreakType.wdSectionBreakNextPage;

WordApp.Visible = false;
doc = this.WordApplication.Documents.Add(ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing);

if (doc != null)
{
    doc.Activate();
    int fileCount = sourceFiles.Length;
    String fileName = string.Empty;

    for (int fileIndex = 0; fileIndex < fileCount; fileIndex++)
    {
        fileName = sourceFiles[fileIndex];
        if (System.IO.File.Exists(fileName))
        {
            section = doc.Sections.Last;
            //delink the current section's header & footer from previous section's header & footer
            section.Headers[WdHeaderFooterIndex.wdHeaderFooterFirstPage].LinkToPrevious = false;
            section.Footers[WdHeaderFooterIndex.wdHeaderFooterFirstPage].LinkToPrevious = false;
            section.Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary].LinkToPrevious = false;
            section.Footers[WdHeaderFooterIndex.wdHeaderFooterPrimary].LinkToPrevious = false;
            section.Headers[WdHeaderFooterIndex.wdHeaderFooterEvenPages].LinkToPrevious = false;
            section.Footers[WdHeaderFooterIndex.wdHeaderFooterEvenPages].LinkToPrevious = false;

            section.Range.InsertFile(fileName, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing);
            //if it is last iteration, do'nt insert break
            if (fileIndex < fileCount - 1)
            {
                object rangeStart = (object)(section.Range.End - 1);
                doc.Range(ref rangeStart, ref paramMissing).InsertBreak(ref sectionBreakNextPage);
            }
        }
    }
    doc.SaveAs(ref targetFile, ref wordFormat, ref paramMissing,
        ref paramMissing, ref paramMissing, ref paramMissing,
        ref paramMissing, ref paramMissing, ref paramMissing,
        ref paramMissing, ref paramMissing, ref paramMissing,
        ref paramMissing, ref paramMissing, ref paramMissing,
        ref paramMissing);
    return true;
}

Gerade jetzt, ich erhalte die folgende Fehlermeldung:

The message filter indicated that the application is busy. (Exception from HRESULT: 0x8001010A (RPC_E_SERVERCALL_RETRYLATER))

Kann dies alles ohne mithilfe der Word Automation?

  • Sind Sie immer jede Art von Ausnahme? Vielleicht so etwas wie das "Abrufen des COM-Klassenfactory für die Komponente mit CLSID {xxxx-xxxx-...} konnte aufgrund des folgenden Fehlers: 80070005"
  • Ich war immer von dieser Ausnahme vor, wenn ich beschädigte meine registry, aber nach einer frischen Installation von Microsoft Office auf einer Virtuellen Maschine, wenn diese LocalPath ist leer, ich erhalte die Meldung "word kann nicht öffnen Sie dieses Dokument-Vorlage".
  • Welche Art von Anwendung u arbeiten?
  • gibt es irgendetwas mehr kann ich Ihnen helfen? Ich denke, Sie haben bereits eine Antwort, die Zeichnung aus glaubwürdigen und/oder offiziellen Quellen.
InformationsquelleAutor teenup | 2014-05-17
Schreibe einen Kommentar