C# 关闭Excel中所有工作表的DXML写入

C# 关闭Excel中所有工作表的DXML写入,c#,asp.net-core-2.0,closedxml,C#,Asp.net Core 2.0,Closedxml,在过去的24小时里,我一直在使用ClosedXML,我觉得除了一个bug之外,我已经从中获得了所需的一切。我有一个现有的工作簿,其中当前有3张工作表。每张图纸上都会有类似的数据,但数值不同。我在下面附上了我的伪代码(特定变量名已更改以保护无辜者) 下面的代码在foreach循环中,因为我正在循环一大组SQL表。问题是,ClosedXML或我所做的事情是将相同的数据写入所有工作表,并覆盖前面和后面的工作表。我觉得也许我做了一些显而易见的事情,但我已经盯着相同的代码看了一段时间,再也看不到明显的错误

在过去的24小时里,我一直在使用ClosedXML,我觉得除了一个bug之外,我已经从中获得了所需的一切。我有一个现有的工作簿,其中当前有3张工作表。每张图纸上都会有类似的数据,但数值不同。我在下面附上了我的伪代码(特定变量名已更改以保护无辜者)

下面的代码在foreach循环中,因为我正在循环一大组SQL表。问题是,ClosedXML或我所做的事情是将相同的数据写入所有工作表,并覆盖前面和后面的工作表。我觉得也许我做了一些显而易见的事情,但我已经盯着相同的代码看了一段时间,再也看不到明显的错误。任何帮助都将不胜感激

  //Workbook = new workbook and filepath are initialized outside of the loop
                    var worksheet = workbook.Worksheet(1);

                //This is used to help me identify what column it is in, it references an array of alphabet characters later
                int column = 0;

                if(loopCt <= 2)
                {
                    worksheet.Cell("A1").Value = "Identifier";
                    worksheet.Cell("B1").Value = "XYZ Day 1";
                    worksheet.Cell("C1").Value = "XYZ Day 2";
                    worksheet.Cell("D1").Value = "XYZ Day 3";
                    worksheet.Cell("E1").Value = "XYZ Day 4";
                    worksheet.Cell("F1").Value = "XYZ Day 5";
                    worksheet.Cell("G1").Value = "XYZ Day 6";
                    worksheet.Cell("H1").Value = "XYZ Day 7";
                    worksheet.Cell("I1").Value = "XYZ Day 8";
                    worksheet.Cell("J1").Value = "XYZ Day 9";
                    worksheet.Cell("K1").Value = "XYZ Day 10";
                    worksheet.Cell("L1").Value = "XYZ Weekly Total";
                }

                worksheet.Cell($"A{loopCt}").Value = item.identifier;

                for (int i = 0; i < XYZDaily.Count(); i++)
                {
                    column += 1;
                    worksheet.Cell($"{alphabet[column]}{loopCt}").Value = XYZDaily[i];

                }

                worksheet.Cell($"L{loopCt}").Value = XYZWeek;

                workbook.Save();

                //QRS Export

                var worksheetQRS = workbook.Worksheet(2);
                int columnQRS = 0;

                if (QRSCt <= 2)
                {
                    worksheetQRS.Cell("A1").Value = "Identifier";
                    worksheetQRS.Cell("B1").Value = "QRS Day 1";
                    worksheetQRS.Cell("C1").Value = "QRS Day 2";
                    worksheetQRS.Cell("D1").Value = "QRS Day 3";
                    worksheetQRS.Cell("E1").Value = "QRS Day 4";
                    worksheetQRS.Cell("F1").Value = "QRS Day 5";
                    worksheetQRS.Cell("G1").Value = "QRS Day 6";
                    worksheetQRS.Cell("H1").Value = "QRS Day 7";
                    worksheetQRS.Cell("I1").Value = "QRS Day 8";
                    worksheetQRS.Cell("J1").Value = "QRS Day 9";
                    worksheetQRS.Cell("K1").Value = "QRS Day 10";
                    worksheetQRS.Cell("L1").Value = "QRS Weekly Total Test";

                }

                worksheetQRS.Cell($"A{loopCt}").Value = item.Identifier;

                for (int i = 0; i < QRSDaily.Count(); i++)
                {
                    columnQRS += 1;
                    worksheetQRS.Cell($"{alphabet[columnQRS]}{loopCt}").Value = QRSDaily[i];

                }

                worksheetQRS.Cell($"L{loopCt}").Value = QRSWeek;


                workbook.Save();
//工作簿=新工作簿和文件路径在循环外部初始化
var工作表=工作簿。工作表(1);
//这是用来帮助我确定它在哪一列,它引用了一个字母字符数组以后
int列=0;

如果(loopCt您总是使用工作簿中的第一个工作表:

var worksheet = workbook.Worksheet(1);
                                   ^

您需要为工作表编号使用一个变量,或使用
workbook.AddWorksheet()
方法。文档中介绍了这一点。

您始终使用工作簿中的第一个工作表:

var worksheet = workbook.Worksheet(1);
                                   ^

您需要为工作表编号使用一个变量,或者使用
workbook.AddWorksheet()
方法。这将在文档中介绍。

Hey Raidri,感谢您的回复,在我的第二个名为QRS export的导出部分中,我使用以下代码;//QRS export var worksheetQRS=workbook.worksheet(2);此声明是否没有建立第二张工作表?在发布之前,我尝试使用工作表名称而不是职位编号,但效果相同…已修复!您返回文档的指示使我走上了正确的轨道…我没有意识到我所做的是使用了Open XML SDK(我最终对它感到失望,并继续研究其他可能更简单的excel编写方法)要创建电子表格,然后关闭XML进行写入,从那里到这里之间的某个地方有些混乱。我注释掉了OpenXML创建者并添加了您引用的代码,它工作起来就像做梦一样。嘿,Raidri,感谢您的回复,在我的第二个导出部分QRS导出中,我使用了以下代码;//QRS导出var worksheetQRS=工作簿。工作表(2);此声明是否没有建立第二张工作表?在发布之前,我尝试使用工作表名称而不是职位编号,但效果相同…已修复!您返回文档的指示使我走上了正确的轨道…我没有意识到我所做的是使用了Open XML SDK(我最终对它感到失望,并继续研究其他可能更简单的excel编写方法)创建电子表格,然后关闭XML在其中编写,从那里到这里的某个地方有些混乱。我注释了OpenXML创建者,并添加了您引用的代码,它工作起来就像一个梦。