OpenXml To Excel之创建文档
2013-03-28 17:18
183 查看
创建文档的方式大致可以分成2种:1.基于现有的模板创建 2.从无到有完全由通过代码生成
选择哪种方式根据自己的需求,如果你的需求中对字体,单元格类型等style要求比较高的话,建议通过模板创建
事先定义好模板,设置好所有的样式,OpenXml只负责把数据填充进去。
现在分别对这两种实现方式进行分析
基于现有的模板创建思路
1.在指定文件夹下定义好Excel文档的template
2.程序运行的时候Copy该模板到另一个目录
3.OpenXml去填充拷贝后的文档
加载文档
获取Worksheet中的sheetData 对象
sheetData用于存储数据的,通过工具分析可以得到,Excel中所有的行和列都是作为sheetData的element形式存在
![](http://img.my.csdn.net/uploads/201303/28/1364461833_2119.gif)
往sheetData中填充数据
创建行
创建单元格并填充数据
保存workBook
选择哪种方式根据自己的需求,如果你的需求中对字体,单元格类型等style要求比较高的话,建议通过模板创建
事先定义好模板,设置好所有的样式,OpenXml只负责把数据填充进去。
现在分别对这两种实现方式进行分析
基于现有的模板创建思路
1.在指定文件夹下定义好Excel文档的template
2.程序运行的时候Copy该模板到另一个目录
File.Copy(reportTemplate, targetFileName, true);
3.OpenXml去填充拷贝后的文档
加载文档
using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(docName, true)) { }获取要填充的sheet对象这里称为Worksheet
private static Worksheet GetWorksheet(SpreadsheetDocument document, string sheetName) { IEnumerable<Sheet> sheets = document.WorkbookPart.Workbook.Descendants<Sheet>().Where(s => s.Name == sheetName); WorksheetPart worksheetPart = (WorksheetPart)document.WorkbookPart.GetPartById(sheets.First().Id); if (sheets.Count() == 0) { return null; } else return worksheetPart.Worksheet; }
获取Worksheet中的sheetData 对象
SheetData sheetData = worksheet.GetFirstChild<SheetData>();
sheetData用于存储数据的,通过工具分析可以得到,Excel中所有的行和列都是作为sheetData的element形式存在
![](http://img.my.csdn.net/uploads/201303/28/1364461833_2119.gif)
往sheetData中填充数据
private static void SetDataIntoSheet(DataTable dt, SheetData sheetData, int sColIndex, int sRowIndex, string header, bool isCal) { for (int i = 0; i < dt.Rows.Count; i++) { for (int j = 0; j < dt.Columns.Count; j++) { SetVal(j + sColIndex, i + sRowIndex, dt.Rows[i][j], sheetData, dt.Rows[i]); } } // if (isCal) SetCalVal(dt.Rows.Count, dt.Columns.Count, 2, sheetData); SetHeader("A1", sheetData, header); }
private static void SetVal(int columnIndex, int rowIndex, object cellValue, SheetData sheetData, DataRow dr) { IEnumerable<Row> rows = sheetData.Descendants<Row>().Where(r => r.RowIndex.Value == rowIndex); if (rows.Count() == 0) { Row contentRow = CreateDataRow(dr, rowIndex); sheetData.AppendChild(contentRow); } else { Row row = rows.First(); IEnumerable<Cell> cells = row.Elements<Cell>().Where(c => c.CellReference.Value == (GetCellReference(columnIndex) + rowIndex)); if (cells.Count() == 0) return; else { Cell cell = cells.First(); cell.CellValue = new CellValue(cellValue.ToString()); int intValue; decimal decValue; if (int.TryParse(cellValue.ToString(), out intValue)) cell.DataType = new EnumValue<CellValues>(CellValues.Number); else if (decimal.TryParse(cellValue.ToString(), out decValue)) cell.DataType = new EnumValue<CellValues>(CellValues.Number); else cell.DataType = new EnumValue<CellValues>(CellValues.String); } } }
创建行
private static Row CreateDataRow(DataRow dataRow, int rowIndex) { Row row = new Row { RowIndex = (UInt32)rowIndex }; int intValue; decimal decValue; for (int i = 0; i < dataRow.Table.Columns.Count; i++) { Cell dataCell; //value type if (int.TryParse(dataRow[i].ToString(), out intValue) && dataRow[i].GetType() == typeof(int)) dataCell = CreateValueCell(i + 1, rowIndex, dataRow[i]); else if (decimal.TryParse(dataRow[i].ToString(), out decValue) && dataRow[i].GetType() == typeof(decimal)) dataCell = CreateValueCell(i + 1, rowIndex, dataRow[i]); else dataCell = CreateTextCell(i + 1, rowIndex, dataRow[i]); row.AppendChild(dataCell); } return row; }
创建单元格并填充数据
private static Cell CreateValueCell(int columnIndex, int rowIndex, object cellValue) { Cell cell = new Cell(); cell.DataType = CellValues.Number; cell.CellReference = GetCellReference(columnIndex); CellValue value = new CellValue(); value.Text = cellValue.ToString(); cell.AppendChild(value); return cell; }
保存workBook
spreadSheet.WorkbookPart.Workbook.Save();
相关文章推荐
- OpenXml To Excel之创建文档2
- Office Open XML学习(1)-创建excel文档,并向单元格中插入字符串
- OpenXml To Excel之准备工作
- OpenXml To Excel之插入图表
- C#利用XML创建Excel文档的实现方法
- 使用XML创建Excel文档
- How to convert Word table into Excel using OpenXML
- 使用XML创建Excel文档
- [转]how to programatically access built-in properties of open xml word doc(如何读取open xml格式文档属性)
- Linq To Xml 创建修改xml文档
- 使用xml来创建excel文档,运行时无需excel
- Using DocumentFormat.OpenXml to generate a new excel file in terms of temp excel file
- OpenXml To Excel之写大数据
- 使用XML创建Excel文档
- 用OpenXml SDK 2.0 创建一个页脚带页码的Word文档
- csharp: Export DataTable to Excel using OpenXml 2.5 in asp.net
- OpenXml SDK 2.0 创建Word文档——最简化的版本
- asp.net使用XML创建Excel文档
- 使用XML创建Excel文档-.NET教程,XML应用 http://www.z6688.com/info/47612-1.htm
- 用OpenXml SDK 2.0 创建一个页脚带页码的Word文档