首页 > 代码库 > 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)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。