【问题标题】:Adding Sheets to Excel Workbook将工作表添加到 Excel 工作簿
【发布时间】:2017-12-21 22:00:57
【问题描述】:

我正在尝试向 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());
    }
}

【问题讨论】:

  • 快速检查一下 - 你能把 {} 括号放在第一个 if/else 条件周围并检查它是否已修复它吗? + 我认为firstRun 总是false
  • excel.Visible = true; 放在代码前面,然后逐行逐行查看导致清除的代码。
  • @mjwills 谢谢,引导我找到解决方案。见下文。

标签: c# excel


【解决方案1】:

可能dt 未正确分配给正确的worksheet。因此,ws.Range["A1"].Offset[0, Idx].Value = dt.Columns[Idx].ColumnName;Null 值带入 ws,因此它正在擦除数据。


几乎,我很确定您的错误是由于您在第一个条件之后没有使用{}

明智地使用它们 - Does C# support if codeblocks without braces?

【讨论】:

  • 绝对不是这个。无论如何我都会更新我的代码。
【解决方案2】:

非常愚蠢的错误,这是因为我每次都添加一个新的工作簿,这会覆盖所有内容。移出初始化工作。

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());
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多