【问题标题】:Print only 5 items per row每行仅打印 5 个项目
【发布时间】:2017-03-28 20:15:19
【问题描述】:

我目前手头有一份物品清单。

例如,

List <string> listOfItem = new List <string>()
{
  "item1",
  "item2",
  "item3",
  "item4",
  "item5",
  "item6",
  "item7",
  "item8",
  "item9",
  "item10",
  "item11",
}

我正在尝试执行 Excel 导出,其中我只打印 5 个第一个项目,然后我移动到下一张表并打印接下来的五个项目并重复该过程。

这是我试过的

int j = 0; 

for (int i = 0; i < listOfItem.Count; i+=4)
{
    if (listOfItem[i] != null){
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j], xlWorkSheet.Cells[8, (j + 1)]].Merge();
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j], xlWorkSheet.Cells[8, (j + 1)]] = orderDate[i];
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j], xlWorkSheet.Cells[8, (j + 1)]].HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j], xlWorkSheet.Cells[8, (j + 1)]].VerticalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j], xlWorkSheet.Cells[8, (j + 1)]].Font.Size = "11";
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j], xlWorkSheet.Cells[8, (j + 1)]].Font.Name = "Arial";
    }
    if (listOfItem[i +1] != null){
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j+2], xlWorkSheet.Cells[8, (j + 3)]].Merge();
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j + 2], xlWorkSheet.Cells[8, (j + 3)]] = listOfItem[i+1];
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j + 2], xlWorkSheet.Cells[8, (j + 3)]].HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j + 2], xlWorkSheet.Cells[8, (j + 3)]].VerticalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j + 2], xlWorkSheet.Cells[8, (j + 3)]].Font.Size = "11";
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j + 2], xlWorkSheet.Cells[8, (j + 3)]].Font.Name = "Arial";
    }
    if (listOfItem[i+2] != null){
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j+3], xlWorkSheet.Cells[8, (j + 5)]].Merge();
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j+4], xlWorkSheet.Cells[8, (j + 5)]] = listOfItem[i+2];
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j+4], xlWorkSheet.Cells[8, (j + 5)]].HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j+4], xlWorkSheet.Cells[8, (j + 5)]].VerticalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j+4], xlWorkSheet.Cells[8, (j + 5)]].Font.Size = "11";
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j+4], xlWorkSheet.Cells[8, (j + 5)]].Font.Name = "Arial";
    }
    if (listOfItem[i+3] != null){
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j+6], xlWorkSheet.Cells[8, (j + 7)]].Merge();
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j+6], xlWorkSheet.Cells[8, (j + 7)]] = listOfItem[i+3];
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j+6], xlWorkSheet.Cells[8, (j + 7)]].HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j+6], xlWorkSheet.Cells[8, (j + 7)]].VerticalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j+6], xlWorkSheet.Cells[8, (j + 7)]].Font.Size = "11";
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j+6], xlWorkSheet.Cells[8, (j + 7)]].Font.Name = "Arial";
    }
    if (listOfItem[i+4] != null){
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j+8], xlWorkSheet.Cells[8, (j + 9)]].Merge();
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j+8], xlWorkSheet.Cells[8, (j + 9)]] = listOfItem[i+4];
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j+8], xlWorkSheet.Cells[8, (j + 9]].HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j+ 8], xlWorkSheet.Cells[8, (j + 9)]].VerticalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j + 8], xlWorkSheet.Cells[8, (j + 9)]].Font.Size = "11";
        xlWorkSheet.Range[xlWorkSheet.Cells[8, j + 8], xlWorkSheet.Cells[8, (j + 9)]].Font.Name = "Arial";
    }
}

我做if else是因为如果列表只有..例如3个项目,那么由于if else循环,代码将基于3个项目执行。

但是,这段代码很长,有没有更精致/优雅的方法来做到这一点?

【问题讨论】:

    标签: c# excel for-loop


    【解决方案1】:

    这可能对你有用

    int j = 0; 
    for (int i = 0; i < listOfItem.Count; i++)
    {
        for(int j=0;j<((listOfItem.Count*2)-2);j+=2)
        {
            if (listOfItem[i] != null)
            {
                xlWorkSheet.Range[xlWorkSheet.Cells[8, j], xlWorkSheet.Cells[8, (j + 1)]].Merge();
                xlWorkSheet.Range[xlWorkSheet.Cells[8, j], xlWorkSheet.Cells[8, (j + 1)]] = listOfItem[i];
                xlWorkSheet.Range[xlWorkSheet.Cells[8, j], xlWorkSheet.Cells[8, (j + 1)]].HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
                xlWorkSheet.Range[xlWorkSheet.Cells[8, j], xlWorkSheet.Cells[8, (j + 1)]].VerticalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
                xlWorkSheet.Range[xlWorkSheet.Cells[8, j], xlWorkSheet.Cells[8, (j + 1)]].Font.Size = "11";
                xlWorkSheet.Range[xlWorkSheet.Cells[8, j], xlWorkSheet.Cells[8, (j + 1)]].Font.Name = "Arial";
            }
        }
    }
    

    这将适用于一张工作表,您还可以拉出更多工作表并将代码包装在 foreach 循环中以相应地将数据发送到另一张工作表。

    【讨论】:

    • 为什么j循环会上升到listOfItem.Count*2 -1
    • @MrinalKamboj:是的!它应该是 -2 而不是 -1
    • 还有一点,如果你在原始程序中看到,因为 OP 只是打印 5 个值然后转移到另一张表,所以在给定的时间点 j 也被限制为 5 个值和然后需要重置,(listOfItem.Count*2)-2可能不保证
    猜你喜欢
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    相关资源
    最近更新 更多