如何保存List到Excel工作表使用EPPLus

本文关键字:工作 Excel EPPLus string 何保存 保存 List | 更新日期: 2023-09-27 18:11:04

我试图使用EPPlus从List<string>保存值到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没有得救,我不知道为什么。第一个工作表的值保存得很好,但其余的没有,我的代码有什么问题?如何设置活动工作表以保存活动工作表上的值?如何在工作表之间移动?

如何保存List<string>到Excel工作表使用EPPLus

好吧,经过几天的头痛和大量的时间阅读我的代码一次又一次,并在互联网上找到我找到了解决方案:我的代码是"好",但我没有得到错误,直到我调试它逐行几次。如果你看到这条线worksheet.Cells[i, col].Value = bdCleanList[i];就是我设置值细胞和它而是 L1 因为i开始在(i+1) 0然后我写很好,细胞开始在1和在499年结束,然后 L2 ,因为我不滚动到最后一列,值500年细胞开始和结束在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++;
        }

这就是我想要的。