2012-09-27 62 views
0

我需要通過OpenXML向Excel行添加一些額外的單元格。但是,下面的代碼似乎沒有做到這一點。希望得到這個工作的任何幫助,請。以編程方式在OpenXML中的Excel中填充行

private Row PadRow(Row row, int p) 
{ 
    try 
    { 
     int currentcount = p - row.Descendants<Cell>().Count<Cell>(); 
     for (int count = 0; count < currentcount; count++) 
      row.Append(new Cell() { DataType = CellValues.String, CellValue = new CellValue(" ") }); 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    }; 
    return row; 
} 

回答

1

找到了很好的解決方法。

http://lateral8.com/articles/2010/3/5/openxml-sdk-20-export-a-datatable-to-excel.aspx

 /// <summary> 
     /// Gets the Excel column name based on a supplied index number. 
     /// </summary> 
     /// <returns>1 = A, 2 = B... 27 = AA, etc.</returns> 
     private string getColumnName(int columnIndex) 
     { 
      int dividend = columnIndex; 
      string columnName = String.Empty; 
      int modifier; 

      while (dividend > 0) 
      { 
       modifier = (dividend - 1) % 26; 
       columnName = 
        Convert.ToChar(65 + modifier).ToString() + columnName; 
       dividend = (int)((dividend - modifier)/26); 
      } 

      return columnName; 
     } 
     private Cell createTextCell(int columnIndex, int rowIndex, object cellValue) 
     { 
      Cell cell = new Cell(); 

      cell.DataType = CellValues.InlineString; 
      cell.CellReference = getColumnName(columnIndex) + rowIndex; 

      InlineString inlineString = new InlineString(); 
      Text t = new Text(); 

      t.Text = cellValue.ToString(); 
      inlineString.AppendChild(t); 
      cell.AppendChild(inlineString); 

      return cell; 
     } 

     public void ProcessDCTRows(IEnumerable<Row> dataRows, SharedStringTable sharedString) 
     { 
      try 
      { 
       //Extract the information for each row 
       foreach (Row row in dataRows) 
       { 
        IEnumerable<String> cellValues; 
        if (row.Descendants<Cell>().Count<Cell>() < 234) 
        { 
         int lastcolindex = row.Descendants<Cell>().Count<Cell>(); 
         int rowindex = Convert.ToInt32(row.RowIndex.ToString()); 
         int currentcount = 234 ; 
         for (; lastcolindex < currentcount; lastcolindex++) 
         { 
          row.AppendChild(createTextCell(lastcolindex,rowindex," ")); 
         } 

        } 

. . //add processing code here 

} 
相關問題