[C#] 對Excel進行讀寫
首先,要先加入 Microsoft Excel 16.0 Object Library 的參考,只要電腦有安裝Excel應該都可以在COM中找到
然後參考
呼叫Excel有三個步驟
分別是Application、Workbook、跟Worksheet
Application可以透過 Visible與UserControl的屬性控制是否要在前景顯示
剩下的就參考一下以下程式碼吧,這是在revit api中呼叫excel寫入資料的練習
值得注意的是為避免程式執行完之後留下多餘的Excel在後端,需要用try catch finally的方式確保無論程式是否執行成功,都有釋放Excel所占資源
然後參考
using Excel = Microsoft.Office.Interop.Excel;
呼叫Excel有三個步驟
分別是Application、Workbook、跟Worksheet
Application可以透過 Visible與UserControl的屬性控制是否要在前景顯示
剩下的就參考一下以下程式碼吧,這是在revit api中呼叫excel寫入資料的練習
值得注意的是為避免程式執行完之後留下多餘的Excel在後端,需要用try catch finally的方式確保無論程式是否執行成功,都有釋放Excel所占資源
//Output 鋼筋表
//存檔路徑
string savefilename = "";
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "Excel活頁簿(*.xlsx)|*.xlsx|所有檔案(*.*)|*.*";
saveFileDialog1.Title = "Export Rebar Table";
if (saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
savefilename = saveFileDialog1.FileName;
else return Result.Cancelled;
//開excel
Excel.Application eapp = new Excel.Application();
Excel.Workbook ebook = null;
Excel.Worksheet esheet = null;
Excel.Range oRng;
int er = 0;
try
{
eapp.Visible = false;
eapp.UserControl = false;
ebook = eapp.Workbooks.Add(Missing.Value);
esheet = (Excel.Worksheet)ebook.ActiveSheet;
oRng = esheet.get_Range("A1", "H250");
int row = 2;
esheet.Cells[1, 1] = "Size";
esheet.Cells[1, 2] = "Color";
foreach (var e in rebarmap)
{
esheet.Cells[row, 1] = e.Key;
esheet.Cells[row, 2] = e.Value;
row++;
}
oRng.EntireColumn.AutoFit();
ebook.SaveAs(savefilename);
}
catch (Exception ex)
{
er++;
MessageBox.Show(ex.Message, "Exception");
}
finally
{
excelquit(eapp, ebook, esheet);//確定確實關掉Excel
}
if (er > 0) return Result.Failed;
else return Result.Succeeded;
}
else if (dialogResult == DialogResult.No)
{
return Result.Succeeded;
}
else return Result.Cancelled;
}
//確實關掉Excel
static public void excelquit(Excel.Application eapp, Excel.Workbook ebook, Excel.Worksheet esheet)
{
if (esheet != null)
{
Marshal.FinalReleaseComObject(esheet);
}
if (ebook != null)
{
ebook.Close(false); //忽略尚未存檔內容,避免跳出提示卡住
Marshal.FinalReleaseComObject(ebook);
}
if (eapp != null)
{
eapp.Workbooks.Close();
eapp.Quit();
Marshal.FinalReleaseComObject(eapp);
}
}
留言
張貼留言