Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将工作表添加到Excel工作簿_C#_Excel - Fatal编程技术网

C# 将工作表添加到Excel工作簿

C# 将工作表添加到Excel工作簿,c#,excel,C#,Excel,我正在尝试将第二张工作表添加到excel文档中,其中每张工作表都是数据表。我发现当添加额外的工作表时,第一个工作表中的数据被删除了。为什么会这样?我如何确保数据不会被擦除 void Export(DataTable dt) { Microsoft.Office.Interop.Excel.Application excel = null; Microsoft.Office.Interop.Excel.Workbook wb = null; object missing

我正在尝试将第二张工作表添加到excel文档中,其中每张工作表都是
数据表
。我发现当添加额外的工作表时,第一个工作表中的数据被删除了。为什么会这样?我如何确保数据不会被擦除

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());
    }
}
void导出(数据表dt)
{
Microsoft.Office.Interop.Excel.Application Excel=null;
Microsoft.Office.Interop.Excel.Workbook wb=null;
对象缺失=类型。缺失;
Microsoft.Office.Interop.Excel.Worksheet ws=null;
Microsoft.Office.Interop.Excel.Range rng=null;
尝试
{
excel=新的Microsoft.Office.Interop.excel.Application();
wb=excel.Workbooks.Add();
如果(首次运行)
{
ws=(Microsoft.Office.Interop.Excel.Worksheet)wb.ActiveSheet;
}
其他的
{
ws=(Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets.Add();
}
for(int Idx=0;Idx
可能
dt
未正确分配到正确的
工作表
。因此,
ws.Range[“A1”].Offset[0,Idx].Value=dt.Columns[Idx].ColumnName
Null
值带入
ws
中,因此它正在擦除数据


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


明智地使用它们-

可能
dt
未正确分配到正确的
工作表中。因此,
ws.Range[“A1”].Offset[0,Idx].Value=dt.Columns[Idx].ColumnName
Null
值带入
ws
中,因此它正在擦除数据


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


明智地使用它们-

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

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());
        }
    }
void initExcel()
{
excel=新的Microsoft.Office.Interop.excel.Application();
wb=excel.Workbooks.Add();
}
void AddToExcel(数据表dt)
{
尝试
{
如果(首次运行)
{
ws=(Microsoft.Office.Interop.Excel.Worksheet)wb.ActiveSheet;
}
其他的
{
ws=(Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets.Add();
}
for(int Idx=0;Idx
这是一个相当愚蠢的错误,因为我每次都要添加一个新工作簿,这会覆盖所有内容。移出初始化工作

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());
        }
    }
void initExcel()
{
excel=新的Microsoft.Office.Interop.excel.Application();
wb=excel.Workbooks.Add();
}
void AddToExcel(数据表dt)
{
尝试
{
如果(首次运行)
{
ws=(Microsoft.Office.Interop.Excel.Worksheet)wb.ActiveSheet;
}
其他的
{
ws=(Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets.Add();
}
for(int Idx=0;Idx
只是一个快速检查-能否将
{
}
括号放在第一个if/else条件的周围,并检查它是否已修复它?+我认为
firstRun
总是
false
?Put
excel.Visible=true前面的代码,然后逐行查看是什么代码导致了清除。@mjwills谢谢,让我找到了解决方案。请参见下文。只需快速检查-能否将
{
}
括号放在第一个if/else条件周围,并检查它是否已修复它?+我认为
firstRun
总是
false
?Put
excel.Visible=true<