interop 라이브러리를 사용하고 Word 문서에도 직접 쓸 수 있습니다. 특히 문서 구조가 아주 간단하다면. 단점 : 보고서를 생성 할 컴퓨터에 Word를 설치해야합니다. 아래 예제에서는 어셈블리를 추가해야합니다. Microsoft.Office.Interop.Word (... \ Office12 \ Microsoft.Office.Interop.Word.dll), Office (... \ Office12 \ Office.dll).
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Office.Interop.Word;
using Microsoft.Office.Core;
using System.Runtime.InteropServices;
using System.IO;
using System.Diagnostics;
namespace WriteToWordSO
{
class Program
{
static void Main(string[] args)
{
_Application app = null;
Documents docs = null;
Document doc = null;
Range range = null;
Tables tables = null;
Table table = null;
object oMissing = System.Reflection.Missing.Value;
object oFalse = false;
object oTrue = true;
object fileName = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "tmp.doc");
object fileFormat = WdSaveFormat.wdFormatDocument;
FileInfo fi = new FileInfo(fileName.ToString());
if (fi.Exists) fi.Delete();
int rows = 4, cols = 5;
try
{
app = new ApplicationClass();
app.Visible = false;
app.DisplayAlerts = WdAlertLevel.wdAlertsNone;
app.AutomationSecurity = MsoAutomationSecurity.msoAutomationSecurityForceDisable;
docs = app.Documents;
doc = docs.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);
range = doc.Range(ref oMissing, ref oMissing);
tables = doc.Tables;
object oAutoFitCell = WdDefaultTableBehavior.wdWord9TableBehavior;
object oAutoFitWindow = WdAutoFitBehavior.wdAutoFitWindow;
table = tables.Add(range, rows, cols, ref oAutoFitCell, ref oAutoFitWindow);
Cell c = null;
Range cellRange = null;
// header row
for (int i = 1; i < cols + 1; i++)
{
c = table.Cell(1, i);
cellRange = c.Range;
cellRange.Text = "Header " + i.ToString();
cellRange.Bold = 1;
Marshal.ReleaseComObject(c);
Marshal.ReleaseComObject(cellRange);
}
// data rows
for (int i = 1; i < cols + 1; i++)
{
for (int j = 1; j < rows; j++)
{
c = table.Cell(j + 1, i);
cellRange = c.Range;
cellRange.Text = "Cell " + i.ToString() + j.ToString();
Marshal.ReleaseComObject(c);
Marshal.ReleaseComObject(cellRange);
}
}
doc.SaveAs(ref fileName, ref fileFormat, 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);
((_Document)doc).Close(ref oFalse, ref oMissing, ref oMissing);
((_Application)app).Quit(ref oFalse, ref oMissing, ref oMissing);
Process.Start(fileName.ToString());
}
finally
{
// frees memory
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
// its very important to release all used object,
// otherwise some complications may appear
if (table != null) Marshal.ReleaseComObject(table);
table = null;
if (tables != null) Marshal.ReleaseComObject(tables);
tables = null;
if (range == null) Marshal.ReleaseComObject(range);
range = null;
if (doc != null) Marshal.ReleaseComObject(doc);
doc = null;
if (docs != null) Marshal.ReleaseComObject(docs);
docs = null;
if (app != null) Marshal.ReleaseComObject(app);
app = null;
}
}
}
}
답을 얻으려면 yes라고 표시하십시오. –