嗯,项目需要。。。
正好知道OpenXml这个东西,所以就拿过来研究了一下。
总体感觉果然是XML思想的产物,我原以为是像DataTable那样操作Excel,结果我想多了,不过还好,挺好用的,扩展性很好的说。
这个链接是微软MVA学院介绍OpenXml的简单教程
这个是OpenXml SDK的下载链接
解压之后,安装。
然后在解决方案中添加这两个引用
以下是代码
(有一点要注意,这个总结是对于向Excel模板中插入数据的,也就是必须保证Excel中有这些Element,对于向一个新的Sheet中插入数据,就必须先创建Element,再填充数据。)
首先,你要有个DataTable来填充Excel
DataTable dt = new DataTable();
dt.Columns.Add("1");
dt.Columns.Add("2");
dt.Columns.Add("3");
dt.Columns.Add("4");
dt.Columns.Add("5");
dt.Columns.Add("6");
dt.Columns.Add("7");
dt.Columns.Add("8");
dt.Columns.Add("9");
dt.Columns.Add("10");
dt.Columns.Add("11");
dt.Columns.Add("12");
for (int i = 0; i < 3; i++)
{
DataRow dr = dt.NewRow();
for (int j = 0; j < 12; j++)
{
dr[j] = i + j;
}
dt.Rows.Add(dr);
}然后,写个方法,传进去
public string Demo(string file, DataTable dt)
{
using (SpreadsheetDocument doucument = SpreadsheetDocument.Open(file, true))
//首先打开一个Excel文档,file指的是Excel的路径,后面的bool参数指的是能否修改,这里因为
//要对Excel做插入数据处理,所有为ture
{
IEnumerable<Sheet> s = doucument.WorkbookPart.Workbook.Descendants<Sheet>().Where(x => x.Name == "Sheet1");
//这里利用一个重要的方法Descendants<T>(),在该元素之下寻找指定子元素
//也就是在工作簿下寻找指定名称为“Sheet1”的工作页
//这里返回的是泛型IEnumerable<Sheet>
WorksheetPart sheet = (WorksheetPart)doucument.WorkbookPart.GetPartById(s.First().Id);
//我们要从泛型中提取第一个工作页
int q = 0;//作为行的计数
foreach (var row in sheet.Worksheet.Descendants<Row>())
//这里,利用Descendants<Row>()方法来获取所有的Row
//OpenXml有一点的好处是,支持LINQ
//在这里,如果我们从第三行开始插入的话可以这样写
//var row in sheet.Worksheet.Descendants<Row>().Where(c => c.RowIndex >= 3 // && c.RowIndex <= dt.Rows.Count + 3)
//这样就获得了第三行到第 dt.Rows.Count + 3 行的引用集合
{
if (q >= dt.Rows.Count)
break;
//限制行的循环不能超过dt的行数
int d = 0;//作为列的计数
foreach (Cell cell in row.Descendants<Cell>())
//循环所有的列
{
if (d >= dt.Columns.Count)
break;
//限制列的循环不能超过dt的列数
cell.CellValue = new CellValue(dt.Rows[q][d].ToString());
//赋值,就是这么简单。。。。,如果你的需求就是这么简单的话。。。。。
d++;
}
q++;
}
sheet.Worksheet.Save();
//千万别忘了保存,要不然写了等于没写
}
}总的来说,还是要多练习,多尝试。
不过我第一次搞这个的时候,这些代码花了两三个小时,一边百度一边尝试。
其实我是想把它封装成类似
sheet[RowBeginIndex][ColumnBeginIndex].Update(dt,dt.Row.count,dt.Column.Count);
以上,以后再慢慢改吧
头好痛,没睡好...........
本文出自 “270jia40” 博客,请务必保留此出处http://270jia40.blog.51cto.com/9149400/1631330
原文地址:http://270jia40.blog.51cto.com/9149400/1631330