2016-11-15 110 views
0

我目前有一个手头项目清单。每行只能打印5个项目

例如,

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个项目,那么代码将执行基于3项因if else循环。

但是,这段代码很长,是否有更精炼/优雅的方式来做到这一点?

回答

0

这可能做的伎俩为您

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循环的代码,以相应的数据发送到另一个工作表。

+0

为什么j循环上升到'listOfItem.Count * 2 -1'? –

+0

@MrinalKamboj:是!它应该是'-2'而不是'-1' –

+0

还有一点,如果你在原始程序中看到,因为OP只是打印5个值然后转移到另一个表,所以在给定时间点'j'是也限制为5个值,然后需要重置,'(listOfItem.Count * 2)-2'可能无法保证 –

0

考虑使用扩展方法如下:

public static class WorkSheetExtension 
{ 
public static void SetValue(this ExcelExport xlWorkSheet, List<string> listOfItem, List<DateTime> OrderDate, int i, int j) 
    { 
     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"; 
     } 
    } 
} 

用法:

int j = 0; 

int j = 0; 

ExcelWorkSheet xlWorkSheet = <Placeholder - Create New Worksheet Object> 

for (int i = 0; i < listOfItem.Count; i += 4) 
{ 
    xlWorkSheet.SetValue(listOfItem, OrderDate, i, j); 

    j += 2; 

    // Change Worksheet object after printing 5 rows 
    if (i % 5 == 4) 
    { 
     j = 0; // Reset j 
     xlWorkSheet = <Placeholder - Create New Worksheet Object> 

    } 
} 

要点:

  • 请注意,我不知道确切的Excel中API库,你一个重新使用。所以我假设了ExcelWorkSheet之类的东西,你需要在扩展方法的占位符中填写正确的对象类型,并且调用