2013-04-27 50 views
1

Excel工作表我试图使用EPPlus从List<string>值保存到一个Excel工作表所以我写了这个代码:如何从一个列表<string>保存值使用EPPLus

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得到在这种情况下,这里的问题是,L2,L3 ... L5值不保存,我不知道为什么。第一张工作表的值保存得很好,但其余的都没有,我的代码出了什么问题?如何设置活动工作表以便将活动工作表上的值保存起来?如何在工作表之间移动?

+1

这是一个糟糕的标题。请阅读http://meta.stackexchange.com/questions/10647/how-do-i-write-a-good-title – 2013-04-27 16:04:02

+0

我不知道这是否是正确的,但只从看着这个我假设你需要' j.toString()' – Sayse 2013-04-27 16:05:46

+0

@SonerGönül好些了吗? – Reynier 2013-04-27 16:05:59

回答

0

好吧,在经历了一段时间的头痛和大量时间阅读我的代码一次又一次,并找到了互联网后,我发现解决方案:我的代码是“好”,但我没有得到错误,直到我调试它线通过线路几次。如果你在该行看到worksheet.Cells[i, col].Value = bdCleanList[i];是我为细胞设定值和它但L1和因为i开始0,然后我在(i+1)写的一切都很好,细胞在1开始并在499结束,然后L2因为我不滚动栏的末尾,值单元500启动和电池1000结束了,这是正确的,因为i在500处,其中L2创建的时刻。这是问题所在。所以我把我的代码更改为这一个:

 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++; 
     } 

而且这样做是我想要的工作。由于这里想尽人帮我

相关问题