openXML(C#)支持生成格式化的数字字段(如1,000,000)

我有现成的代码,使用OpenXML从Excel生成电子表格。 它工作正常,但我总是不得不进入电子表格后添加格式。

有没有反正在我的C#代码我可以指定,我想要格式化一定数字格式的列)逗号,小数等?

任何示例的链接都会很好。

这里是我现在如何保存数据:

public void SetCell<T>(string column, uint rowIndex, T value) { SheetData sheetData = _positionSheet; Cell cell = GetCell(sheetData, column, rowIndex); string stringValue = value == null ? "" : value.ToString(); cell.CellValue = new CellValue(stringValue); switch (typeof(T).Name) { case "Date": case "DateTime": cell.DataType = CellValues.Date; break; case "Int32": cell.DataType = CellValues.Number; break; default: cell.DataType = CellValues.String; break; } } 

下面是GetCell()方法(即使我猜这不是真正相关的问题:

  static private Cell GetCell(SheetData sheet, string column, uint rowIndex) { Cell cell; Row row = GetRow(sheet, rowIndex); if (row.Elements<Cell>().Where(c => c.CellReference.Value == column + rowIndex).Any()) { cell = row.Elements<Cell>().Where(c => c.CellReference.Value == column + rowIndex).First(); } else { Cell refCell = null; var comparer = new CellComparer(); foreach (Cell existingCell in row.Elements<Cell>()) { if (comparer.Compare(existingCell.CellReference.Value, column + rowIndex) > 0) { refCell = existingCell; break; } } cell = new Cell { CellReference = column + rowIndex }; row.InsertBefore(cell, refCell); } return cell; } 

是的,这是可能的,但是它都深深扎根于风格之中。 考虑使用ClosedXML,它具有类似于旧的Excel对象模型的对象模型,并使用OpenXML。 一切都很简单。

您可以使用ExtremeML ,它基于OpenXML。 如果使用它,你可以定义一个模板,并通过模板生成excel文件。

book1.xlsx是模板,book2.xlsx是最后的文件。 tabb1是Excel 2007中的表格。

  FileStream fs = new FileStream ( @"d:\book1.xlsx" , FileMode.Open ); FileStream msm = new FileStream ( @"d:\book2.xlsx" , FileMode.CreateNew ); using ( var package = SpreadsheetDocumentWrapper.Open ( fs , msm ) ) { var table = package.WorkbookPart.GetTablePart ( "tabb1" ).Table; var data = new List<object[]> ( ); for ( var i = 0 ; i < 10 ; i++ ) { data.Add ( new object[] { "1" , "2" , "3" , "4" } ); } table.Fill ( data.ToArray ( ) ); } fs.Close ( ); msm.Close ( );