首页 > 代码库 > VSTO学习之路:学习使用Epplus(1)

VSTO学习之路:学习使用Epplus(1)

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

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 //单元格A110 ExcelRange cell1 = sheet.Cells["A1"];11 //第一个单元格12 ExcelRange cell2 = sheet.Cells[1, 1];13 //区域A1:E514 ExcelRange range1 = sheet.Cells["A1:E5"];15 //区域A1:E516 ExcelRange range2 = sheet.Cells[1, 1, 5, 5];

取得单元格的值

1 //单元格的值2 object value = http://www.mamicode.com/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 = http://www.mamicode.com/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(1)