国庆中秋节倒计时开始了,趁着祖国妈妈生日&&家人团聚之前来复习一波C#读取Excel基础操作。本篇主要讲用Epplus读取常规文本表格及读取包含图片的Excel表格。
1.了解下Epplus
Epplus是一个使用Open Office XML(Xlsx)文件格式读写xlsx文件的net库。支持功能:
单元格范围
单元格样式(边框,颜色,填充,字体,数字,对齐方式)
图表
图片
形状
评论
桌子
保护
加密
数据透视表
资料验证
条件格式
VBA
公式计算
等等,功能还是很丰富,它在第5版之前是基于LGPL 开源许可,5版之后就换授权了,至于为啥?用的人多了,作者估计靠它的授权费加维护估计也可以发家致富奔小康了(一派胡言听听就好),但是个人学习什么的,非商业目的,非商业组织还是可以用用。
2.控制台读取纯文本的简单表格Demo
准备一个 测试数据.xlsx 文件,内容如下:
static void Main(string[] args){ string filepath ="测试数据.xlsx"; FileInfo file = new FileInfo(filepath); ExcelPackage.LicenseContext = LicenseContext.NonCommercial; using (ExcelPackage package = new ExcelPackage(file)) { ExcelWorkbook workbook = package.Workbook; ExcelWorksheet worksheet = workbook.Worksheets.First(); int rows = worksheet.Dimension.End.Row; int cols = worksheet.Dimension.End.Column; for (int j = 1; j <=rows; j++) { for (int i = 1; i <= cols; i++) { Console.Write(worksheet.Cells[j, i].Value.ToString() + "\t"); } Console.WriteLine(""); } } Console.ReadKey(); } }
输出结果如下:
3.控制台读取带图片的文字表格Demo
准备一个 测试数据2.xlsx 文件,内容如下:
读取表格图片的思路是在 worksheet.Drawings 集合中找到 image保存到本地然后去用程序显示,话不多说,用下面的代码替换上面循环的打印那段代码即可:
if(i == 5) { var excelPicture = worksheet.Drawings.Where(o => o.From.Row == (j - 1)).FirstOrDefault() as OfficeOpenXml.Drawing.ExcelPicture; var imagepath = Path.Combine (string.Format("tmp/{0}.jpg", DateTime.Now.ToFileTime())); if (excelPicture != null) { excelPicture.Image.Save(imagepath, System.Drawing.Imaging.ImageFormat.Jpeg); Console.Write(imagepath + "\t"); } else { Console.Write(worksheet.Cells[j, i].Value.ToString() + "\t"); } } else { Console.Write(worksheet.Cells[j, i].Value.ToString() + "\t"); }
输出结果如下:
本次分享结束了,实际工作可能不会这么简单,因为实现的需求总是奇奇怪怪的。这次只是解决了xlsx文件的读取,写code的时候还是得掌握基本对象的使用,了解行列的索引这些差不多就可以成为一个合格的CV大师。
最后留给大家思考: 1.如一个单元格中多张图片的处理怎么办? 2.跨行合并单元格的数据如何去处理? 3.还有xls文件如何处理呢? 这些问题有兴趣的小伙伴可以实践一下,说不定哪天会用上~喜欢的小伙伴点个?!祝大家中秋快乐!