[英]Adding Sheets to Excel Workbook
我試圖將第二張工作表添加到excel文檔,其中每張工作表都是一個Datatable
。 我發現在添加其他工作表的同時,第一工作表中的數據也被擦除了。 為什么會這樣?如何確保不刪除數據?
void Export(DataTable dt)
{
Microsoft.Office.Interop.Excel.Application excel = null;
Microsoft.Office.Interop.Excel.Workbook wb = null;
object missing = Type.Missing;
Microsoft.Office.Interop.Excel.Worksheet ws = null;
Microsoft.Office.Interop.Excel.Range rng = null;
try
{
excel = new Microsoft.Office.Interop.Excel.Application();
wb = excel.Workbooks.Add();
if (firstRun)
{
ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.ActiveSheet;
}
else
{
ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets.Add();
}
for (int Idx = 0; Idx < dt.Columns.Count; Idx++)
{
ws.Range["A1"].Offset[0, Idx].Value = dt.Columns[Idx].ColumnName;
}
for (int Idx = 0; Idx < dt.Rows.Count; Idx++)
{
ws.Range["A2"].Offset[Idx].Resize[1, dt.Columns.Count].Value =
dt.Rows[Idx].ItemArray;
}
if (!firstRun)
{
excel.Visible = true;
wb.Activate();
}
firstRun = false;
}
catch (COMException ex)
{
MessageBox.Show("Error accessing Excel: " + ex.ToString());
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.ToString());
}
}
dt
可能沒有正確分配給正確的worksheet
。 因此, ws.Range["A1"].Offset[0, Idx].Value = dt.Columns[Idx].ColumnName;
正在將Null
值計入ws
,因此正在擦除數據。
幾乎可以肯定,您的錯誤是由於以下事實造成的:您在第一個條件之后沒有使用{
和}
。
明智地使用它們-C#是否支持不帶括號的代碼塊?
這是一個很愚蠢的錯誤,這是因為我每次都要添加一個新的工作簿,而這會覆蓋所有內容。 搬出初始化工作。
void initExcel()
{
excel = new Microsoft.Office.Interop.Excel.Application();
wb = excel.Workbooks.Add();
}
void AddToExcel(DataTable dt)
{
try
{
if (firstRun)
{
ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.ActiveSheet;
}
else
{
ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets.Add();
}
for (int Idx = 0; Idx < dt.Columns.Count; Idx++)
{
ws.Range["A1"].Offset[0, Idx].Value = dt.Columns[Idx].ColumnName;
}
for (int Idx = 0; Idx < dt.Rows.Count; Idx++)
{
ws.Range["A2"].Offset[Idx].Resize[1, dt.Columns.Count].Value =
dt.Rows[Idx].ItemArray;
}
if (lastRun)
{
excel.Visible = true;
wb.Activate();
}
firstRun = false;
}
catch (COMException ex)
{
MessageBox.Show("Error accessing Excel: " + ex.ToString());
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.ToString());
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.