VSTO学习之路:学习使用Epplus

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VSTO学习之路:学习使用Epplus相关的知识,希望对你有一定的参考价值。

关于读取其它工作簿数据的几个方式的比较:

1、VBA的GetObject方法,会调用Excel程序打开工作簿(虽然不可见,但确实是打开的)

2、SQL,使用繁琐缺少灵活,不支持单元格样式的操作,也似乎不支持delete语句删除源数据。

3、使用Open XML SDK,基于Open XML,不依赖于Excel程序,但步骤繁琐。

4、Epplus,基于OpenXML,简单灵活,不依赖Excel程序打开工作簿,处理数据的速度快。

下载:Epplus,引用Epplus,然后  using OfficeOpenXml  

样例工作簿:

技术分享

创建对象,构造函数接收一个FileInfo对象

1 string path = @"E:\\studyvs\\open xml\\2.xlsx";
2 FileInfo info = new FileInfo(path);
3 ExcelPackage doc = new ExcelPackage(info);

要新建一个工作簿,工作簿至少要有一个工作表

1 string path = @"E:\\studyvs\\open xml\\333.xlsx";
2 if (File.Exists(path))
3 {
4     File.Delete(path);
5 }
6 FileInfo info = new FileInfo(path);
7 ExcelPackage doc = new ExcelPackage(info);
8 doc.Workbook.Worksheets.Add("mySheet");
9 doc.Save();

遍历工作簿中的工作表

 1 string path = @"E:\\studyvs\\open xml\\2.xlsx";
 2 FileInfo info = new FileInfo(path);
 3 ExcelPackage doc = new ExcelPackage(info);
 4 ExcelWorksheets sheets = doc.Workbook.Worksheets;
 5 //Worksheets[i]的索引可以是工作表name,也可以是工作表在工作簿中的排列位置
 6 for (int i = 1; i <= sheets.Count; i++)
 7 {
 8     string s = string.Format("PositonID是{0}的工作表名称是{1}", i.ToString(), sheets[i].Name);
 9     System.Windows.Forms.MessageBox.Show(s);
10 }

使用foreach

1 foreach (ExcelWorksheet sheet in sheets)
2 {
3     string s = string.Format("第{0}个工作表名称是{1}", sheet.Index, sheet.Name);
4     System.Windows.Forms.MessageBox.Show(s);
5 }

以上两种方式对工作表的输出顺序是完成相同的,依次是:mySheet、sheet1,4,3,2

支持Linq

 ExcelWorksheet sheet= sheets.Single(s => s.Name == "mySheet") 

引用单元格

 1 //使用的单元格区域地址
 2 string address = sheet.Dimension.Address;
 3 //最大行数
 4 int maxrow = sheet.Dimension.Rows;
 5 //最大列数
 6 int maxcolumn = sheet.Dimension.Columns;
 7 //已使用的单元格区域
 8 ExcelRange usedrange = sheet.Cells;
 9 //单元格A1
10 ExcelRange cell1 = sheet.Cells["A1"];
11 //第一个单元格
12 ExcelRange cell2 = sheet.Cells[1, 1];
13 //区域A1:E5
14 ExcelRange range1 = sheet.Cells["A1:E5"];
15 //区域A1:E5
16 ExcelRange range2 = sheet.Cells[1, 1, 5, 5];

取得单元格的值

1 //单元格的值
2 object value = sheet.Cells[1, 1].Value;
3 //获得单元格的强类型值
4 string name = sheet.Cells[1, 1].GetValue<string>();
5 double age = sheet.Cells[2, 2].GetValue<double>();
6 //区域的值是二维数组
7 object[,] values = (object[,])sheet.Cells.Value;

取得目标区域的值并赋值给当前活动工作表

1 object[,] values = (object[,])sheet.Cells.Value;
2 //Globas.Sheet1获了文档级项目的Sheet1工作表;数组的维度从0开始
3 Range rng = Globals.Sheet1.Range["A1"].Resize[values.GetUpperBound(0)+1,values.GetUpperBound(1)+1];
4 rng.Value = values;

合并同一目录下的所有工作簿:

将同一个文件夹下的工作簿中的第一张工作表(当然也可以是所有工作表,本例只取一个)合并到新的工作簿text.xlsx中。

 1 string path = @"E:\\studyvs\\open xml\\test.xlsx";
 2 FileInfo info = new FileInfo(path);
 3 //要合并到的工作簿
 4 ExcelPackage doc = new ExcelPackage(info);
 5 int i = 1;
 6 foreach (string excel in Directory.GetFiles(@"E:\\studyvs\\open xml\\"))
 7 {
 8     //using帮助释放资源
 9     using (ExcelPackage p = new ExcelPackage(new FileInfo(excel)))
10     {
11         ExcelWorksheet sheet = p.Workbook.Worksheets.First();
12         doc.Workbook.Worksheets.Add(i.ToString(), sheet);
13         i++;
14     }
15 }
16 //保存工作簿
17 doc.Save();
18 System.Windows.Forms.MessageBox.Show("合并成功");

技术分享

 

以上是关于VSTO学习之路:学习使用Epplus的主要内容,如果未能解决你的问题,请参考以下文章

[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段

Excel催化剂开源第16波-VSTO开发之脱离传统COM交互以提升性能

有C#基础学习VBA还是VSTO哪个更容易和有效

vsto 学习

《Python学习之路 -- Python基础之切片》

VSTO学习——创建Word解决方案