我尝试将第二张表添加到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());
}
}
答案 0 :(得分:0)
可能dt
未正确分配给正确的worksheet
。因此,ws.Range["A1"].Offset[0, Idx].Value = dt.Columns[Idx].ColumnName;
将Null
值转换为ws
,因此它正在删除数据。
相当多,我很确定您的错误是由于您在第一个条件之后没有使用{
和}
这一事实。
答案 1 :(得分:0)
非常愚蠢的错误,这是因为我每次都会添加一个新的工作簿来覆盖所有内容。移出初始化工作。
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());
}
}