将表格添加到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()); } }