将表格添加到Excel工作簿
我试图添加第二个工作表到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()); } }