我有使用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;
}
答案 0 :(得分:1)
您可以使用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 ( );
答案 1 :(得分:1)
是的,这是可能的,但它们都埋藏在风格之中。考虑使用ClosedXML它具有类似于旧的良好Excel对象模型的对象模型,并使用OpenXML。一切都比它简单得多。