1

我正在尝试List<string>使用 EPPlus 将值从 a 保存到 Excel 工作表,所以我编写了以下代码:

    private void button3_Click(object sender, EventArgs e)
    {
        int value = bdCleanList.Count() / Int32.Parse(textBox7.Text);
        string bases_generadas = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bases_generadas");

        var package = new ExcelPackage();

        package.Workbook.Worksheets.Add("L1");
        ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
        worksheet.Name = "L1";

        int j = 2;
        int col = 1;

        for (int i = 1; i < bdCleanList.Count(); i++)
        {
            if (i%Int32.Parse(textBox7.Text) == 0)
            {
                package.Workbook.Worksheets.Add("L" + j);
                worksheet = package.Workbook.Worksheets[j];
                worksheet.Name = "L" + j;
                j += 1;

                worksheet.Cells[i, col].Value = bdCleanList[i];
            }
            else
            {
                worksheet.Cells[i, col].Value = bdCleanList[i];
            }
        }

        Byte[] bin = package.GetAsByteArray();
        File.WriteAllBytes(System.IO.Path.Combine(bases_generadas, "bases_generadas_" + DateTime.Now.Ticks.ToString() + DateTime.Now.ToString("dd-MM-yyyy-hh-mm-ss") + ".xlsx"), bin);

        MessageBox.Show("Se generaron un total de " + value + " bases y puede encontrarlas en la siguiente ruta: " + System.IO.Path.Combine(bases_generadas, "bases_generadas_" + DateTime.Now.Ticks.ToString() + DateTime.Now.ToString("dd-MM-yyyy-hh-mm-ss") + ".xlsx"), "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }

在我运行的示例bdCleanList.Count()中有 2056 个值, Int32.Parse(textBox7.Text) 有 500 作为值,所以value在这种情况下5,这里的问题是 L2, L3 ... L5 的值没有保存,我不知道为什么。第一个工作表的值保存得很好,但其余的没有,我的代码有什么问题?如何设置活动工作表以将值保存在活动工作表上?如何在工作表之间移动?

4

1 回答 1

0

好的,经过几天的头痛和大量阅读我的代码一次又一次并通过 Internet 找到的时间后,我找到了解决方案:我的代码“很好”,但直到我逐行调试几次后才发现错误. 如果你在这一行看到的worksheet.Cells[i, col].Value = bdCleanList[i];是我为 Cells 设置值的地方,但它确实为L1设置了值,因为i从开始到0然后我写的(i+1)一切都很好,Cells 从 1 开始并以 499 结束,然后是L2,因为我没有滚动到 Column 的末尾,值从 Cell 500 开始,到 Cell 1000 结束,这是正确的,因为i在创建 L2 的那一刻是在 500 上。这就是问题所在。所以我把我的代码改成这个:

        int pos = 1;

        for (int i = 0; i < bdCleanList.Count(); i++)
        {
            if ((i + 1) % Int32.Parse(textBox7.Text) == 0)
            {
                package.Workbook.Worksheets.Add("B" + j);
                worksheet = package.Workbook.Worksheets[j];
                worksheet.Name = "B" + j;

                j += 1;
                pos = 1;
            }

            worksheet.Cells[pos, 1].Value = bdCleanList[i];
            pos++;
        }

这就是我想要的工作。感谢这里的每一个人试图帮助我

于 2013-04-30T14:52:47.787 回答