Ich versuche, eine Menge von PDFs aus mehreren Word-Dokumente zu erstellen. Leider kann ich nicht schließen/aufräumen (Garbage Collection). Daher ist der Speicherverbrauch sehr hoch, und schließlich wird das Programm heruntergeladen.Office-Anwendungen Wort in C#
Hier ist mein Code. Ich hoffe, dass ihr schlauen Jungs mich zu einer Lösung führen könnt.
//**************************************************************
// Please notice:
//
// this.Files is an array with filepath and filenames e.g.:
// {"x:\doc\doc1.doc", "x:\doc\doc2.doc",...,"x:\doc\docn.doc"}.
//
// Please notice:
//**************************************************************
public void wordToPDF() {
string LS_fileName = "";
string LS_fileExtension = "";
string LS_PDF = ".pdf";
try
{
foreach (string Filename in this.Files)
{
LS_fileName = Path.GetFileName(Filename);
if (Path.GetExtension(Filename) == ".doc" || Path.GetExtension(Filename) == ".docx")
{
// Convert to PDF:
Microsoft.Office.Interop.Word.Application appWord = new Microsoft.Office.Interop.Word.Application();
wordDocument = appWord.Documents.Open(GlobalVar.TempFiles + LS_fileName);
LS_fileExtension = Path.GetExtension(Filename);
LS_fileName = LS_fileName.Replace(LS_fileExtension, LS_PDF); int i = 0;
foreach (string value in this.Files)
{
if (value == Filename)
{
this.Files[i] = this.Files[i].Replace(LS_fileExtension, LS_PDF);
break;
}
i++;
}
wordDocument.ExportAsFixedFormat(GlobalVar.TempFiles + LS_fileName, MSWORD.WdExportFormat.wdExportFormatPDF);
System.Runtime.InteropServices.Marshal.ReleaseComObject(appWord);
}
}
}
catch (Exception ex)
{
Console.WriteLine("getFiles Hello I must be going.");
}
}
}
// UPDATE # 1:
public void wordToPDF() {
string LS_fileName = "";
string LS_fileExtension = "";
string LS_PDF = ".pdf";
int i = 0;
MSWORD.Application appWord = new MSWORD.Application();
try
{
foreach (string Filename in this.Files)
{
LS_fileName = Path.GetFileName(Filename);
if (Path.GetExtension(Filename) == ".doc" || Path.GetExtension(Filename) == ".docx")
{
// Convert to PDF:
wordDocument = appWord.Documents.Open(GlobalVar.TempFiles + LS_fileName);
LS_fileExtension = Path.GetExtension(Filename);
LS_fileName = LS_fileName.Replace(LS_fileExtension, LS_PDF);
i = 0;
foreach (string value in this.Files)
{
if (value == Filename)
{
this.Files[i] = this.Files[i].Replace(LS_fileExtension, LS_PDF);
break;
}
i++;
}
wordDocument.ExportAsFixedFormat(GlobalVar.TempFiles + LS_fileName, MSWORD.WdExportFormat.wdExportFormatPDF);
}
}
}
catch (Exception ex)
{
Console.WriteLine("getFiles Hello I must be going.");
System.Runtime.InteropServices.Marshal.ReleaseComObject(appWord);
wordDocument.Close();
if (appWord != null)
{
appWord.Quit();
appWord = null;
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
System.Runtime.InteropServices.Marshal.ReleaseComObject(appWord);
wordDocument.Close();
if (appWord != null)
{
appWord.Quit();
appWord = null;
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
// UPDATE # 2:
public void wordToPDF()
{
string LS_fileName = "";
string LS_fileExtension = "";
string LS_PDF = ".pdf";
object missingType = Type.Missing;
object SaveChanges = Type.Missing;
object OriginalFormat = Type.Missing;
object RouteDocument = Type.Missing;
MSWORD.Application appWord = new MSWORD.Application();
try
{
foreach (string Filename in this.Files)
{
LS_fileName = Path.GetFileName(Filename);
if (Path.GetExtension(Filename) == ".doc" || Path.GetExtension(Filename) == ".docx")
{
// Convert to PDF:
wordDocument = appWord.Documents.Open(GlobalVar.TempFiles + LS_fileName);
LS_fileExtension = Path.GetExtension(Filename);
LS_fileName = LS_fileName.Replace(LS_fileExtension, LS_PDF);
int i = 0;
foreach (string value in this.Files)
{
if (value == Filename)
{
this.Files[i] = this.Files[i].Replace(LS_fileExtension, LS_PDF);
break;
}
i++;
}
wordDocument.ExportAsFixedFormat(GlobalVar.TempFiles + LS_fileName, MSWORD.WdExportFormat.wdExportFormatPDF);
wordDocument.Close();
}
}
}
catch (Exception ex)
{
Console.WriteLine("getFiles Hello I must be going.");
System.Runtime.InteropServices.Marshal.ReleaseComObject(appWord);
if (appWord != null)
{
appWord.Quit();
appWord = null;
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
System.Runtime.InteropServices.Marshal.ReleaseComObject(appWord);
appWord.Quit(ref object SaveChanges = Type.Missing, ref object OriginalFormat);
if (appWord != null)
{
appWord = null;
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
}
Verwendung ‚entsorgen‘ oder ‚Verwendung‘ Aussagen. – user3150546
Dafür brauche ich Hilfe. Danke im Voraus. –