C#操作Excel文件
C#操作Excel文件
前言
好久没更新博客了,趁着最近经常需要使用到Excel,就随手更新下博客把!由于之前一直使用的是Microsoft.Office.Interop.Excel,但是呢,在使用的过程中遇到过各种问题,比如说对于Office2003和Office2010的时候,需要配置不同的连接字符串,配置完后有些还是会报错,就需要注册dll。于是,就想能不能换个dll继续搞。于是,我们本次的主角Aspose.Cell.dll登场了。
方法
1、操作Excel工作表数据转成DataTable对象
对于.net来说,Excel相当于我们数据库中的数据库,而其中的WorkSheet也就是工作表,相当于我们数据库中的Table,于是,针对我们使用的对象,我们对DataTable的操作还是比较方便的,于是,我们就有了下面的方法。
#region 从Excel导入数据成DataTable/// <summary>/// 从Excel导入数据成DataTable/// </summary>/// <param name="ExcelPath">导入的数据路径</param>/// <param name="SheetName">选择的表明 可以用索引0</param>/// <returns></returns>public static DataTable GetDataTable(string ExcelPath, string SheetName){DataTable dt = new DataTable();try{//先获得WorkBook 类似数据集DataSetAspose.Cells.Workbook workbook = new Aspose.Cells.Workbook(ExcelPath);//获取数据工作表 可以用数字索引 类似DataTableAspose.Cells.Worksheet sheet = workbook.Worksheets[SheetName];//数据范围 默认从第0行 第0列开始//最大行 最大列//是否读取列字段名dt = sheet.Cells.ExportDataTable(0, 0, sheet.Cells.MaxDataRow + 1, sheet.Cells.MaxDataColumn + 1, true);}catch (Exception){dt = null;}return dt;} #endregion
2、DataGridView数据转DataTable对象
我们在数据导出到Excel之前,肯定是要让客户预览表格数据的内容,所以在此需要从DataGridView数据到DataTable数据的一个中转。
#region DataGridView转换为DataTable/// <summary>/// DataGridView转换为DataTable/// </summary>/// <param name="dgv"></param>/// <returns></returns>public static DataTable GetDgvToTable(DataGridView dgv){DataTable dt = new DataTable();// 列强制转换for (int count = 0; count < dgv.Columns.Count; count++){DataColumn dc = new DataColumn(dgv.Columns[count].Name.ToString());dt.Columns.Add(dc);}// 循环行for (int count = 0; count < dgv.Rows.Count; count++){DataRow dr = dt.NewRow();for (int countsub = 0; countsub < dgv.Columns.Count; countsub++){dr[countsub] = Convert.ToString(dgv.Rows[count].Cells[countsub].Value);}dt.Rows.Add(dr);}return dt;}#endregion
3、确保导出文件路径无误
#region 确保路径无误创建public bool CreateDirectory(string directoryPath){try{if (!isExistsDirectory(directoryPath)) // 返回bool类型,存在返回true,不存在返回false{Directory.CreateDirectory(directoryPath); //不存在则创建路径return true;}else{return true;}}catch (Exception ex){LogHelper.LogFileHelper.SaveLogForExceptionClient(ex.ToString());return false;}}#endregion
4、从DataTable对象导出到Excel数据
也就是我们常用到的数据导出功能
#region DataTable数据导出Excel任务文件/// <summary>/// DataTable数据导出Excel任务文件/// </summary>/// <param name="data1">DataTable对象</param>/// <param name="filePath">文件保存的路径</param>/// <param name="ColumnsHeadText">保存的Excel标题名称</param>private static void TotalMethod(DataTable data1, string filePath, string[] ColumnsHeadText){try{CreateDirectory(filePath);//Workbook book = new Workbook("E:\\test.xlsx"); //打开工作簿Workbook book = new Workbook(); //创建工作簿Worksheet sheet = book.Worksheets[0]; //创建工作表Cells cells = sheet.Cells; //单元格//创建标题样式Aspose.Cells.Style style = book.Styles[book.Styles.Add()];style.Borders[Aspose.Cells.BorderType.LeftBorder].LineStyle = Aspose.Cells.CellBorderType.Thin; //应用边界线 左边界线 style.Borders[Aspose.Cells.BorderType.RightBorder].LineStyle = Aspose.Cells.CellBorderType.Thin; //应用边界线 右边界线 style.Borders[Aspose.Cells.BorderType.TopBorder].LineStyle = Aspose.Cells.CellBorderType.Thin; //应用边界线 上边界线 style.Borders[Aspose.Cells.BorderType.BottomBorder].LineStyle = Aspose.Cells.CellBorderType.Thin; //应用边界线 下边界线 style.HorizontalAlignment = TextAlignmentType.Center; //单元格内容的水平对齐方式文字居中style.Font.Name = "宋体"; //字体style.Font.IsBold = true; //设置粗体style.Font.Size = 14; //设置字体大小//style.ForegroundColor = System.Drawing.Color.FromArgb(153, 204, 0); //背景色//style.Pattern = Aspose.Cells.BackgroundType.Solid; //背景样式style.IsTextWrapped = true; //单元格内容自动换行//创建内容样式Aspose.Cells.Style style1 = book.Styles[book.Styles.Add()];style1.Borders[Aspose.Cells.BorderType.LeftBorder].LineStyle = Aspose.Cells.CellBorderType.Thin; //应用边界线 左边界线 style1.Borders[Aspose.Cells.BorderType.RightBorder].LineStyle = Aspose.Cells.CellBorderType.Thin; //应用边界线 右边界线 style1.Borders[Aspose.Cells.BorderType.TopBorder].LineStyle = Aspose.Cells.CellBorderType.Thin; //应用边界线 上边界线 style1.Borders[Aspose.Cells.BorderType.BottomBorder].LineStyle = Aspose.Cells.CellBorderType.Thin; //应用边界线 下边界线 style1.HorizontalAlignment = TextAlignmentType.Center; //单元格内容的水平对齐方式文字居中style1.Font.Name = "宋体"; //字体style1.Font.IsBold = false; //设置粗体style1.Font.Size = 11; //设置字体大小//style.ForegroundColor = System.Drawing.Color.FromArgb(153, 204, 0); //背景色//style.Pattern = Aspose.Cells.BackgroundType.Solid; //背景样式style1.IsTextWrapped = true; //单元格内容自动换行if (data1.Rows.Count > 0){//表格填充DataTable1数据int Colnum1 = data1.Columns.Count;//表格列数 int Rownum1 = data1.Rows.Count;//表格行数 //生成行 列名行 for (int i = 0; i < Colnum1; i++){if (i < ColumnsHeadText.Length){string strTemp = ColumnsHeadText[i];cells[0, i].PutValue(strTemp); //添加表头}else{cells[0, i].PutValue(data1.Columns[i].ColumnName); //添加表头}cells[0, i].SetStyle(style); //添加样式if (i == 5){cells.SetColumnWidth(i, 100.0); //自定义列宽}else{cells.SetColumnWidth(i, 35); //自定义列宽}cells.SetRowHeight(0, 30); //自定义高}//生成数据行 for (int i = 0; i < Rownum1; i++){for (int k = 0; k < Colnum1; k++){cells[1 + i, k].PutValue(data1.Rows[i][k].ToString()); //添加数据cells[1 + i, k].SetStyle(style1); //添加样式}}sheet.AutoFitColumns(); //自适应宽if (!Directory.Exists(filePath)){Directory.CreateDirectory(filePath);}if (Directory.Exists(filePath)){filePath += @"\" + DateTime.Now.ToString("yyyyMMdd_hh_mm") + ".xls";}book.Save(filePath);GC.Collect();MessageBox.Show("导出报表到Excel文件成功");}else{MessageBox.Show("数据源内容为空,不允许导出数据");}}catch (Exception e){MessageBox.Show(e.ToString());}}#endregion
结尾
个人是强烈推荐使用Aspose.Cells.dll 因为他在使用的过程中不会因为版本原因和各种单元格格式的问题而报错,且处理速度很快。
需要的筒子们可以自行下载:Aspose.Cell.dll 点击此处即可下载
链接:https://pan.baidu.com/s/11Mic3mnpZjMdRe3vR3jMDw
提取码:o9jx
C#操作Excel文件相关推荐
- C#在客户端和服务端操作Excel文件
一.在客户端把数据导入到Excel文件步骤 1.创建Excel application对象,打开或生成Excel文件 //服务端创建StringBuilder对象 System.Text.St ...
- python处理excel表格实例-使用Python操作excel文件的实例代码
使用的类库 pip install openpyxl 操作实现 •工作簿操作 # coding: utf-8 from openpyxl import Workbook # 创建一个excel工作簿 ...
- C#操作Excel文件(转)
摘要:本文介绍了Excel对象.C#中的受管代码和非受管代码,并介绍了COM组件在.net环境中的使用. 关键词:受管代码:非受管代码:Excel对象:动态连接库 引言 Excel是微软公司办公自动化 ...
- php删除excel文件,php操作excel文件的方法小结
php操作excel文件的方法小结 php操作excel文件的方法有哪些?就跟随百分网小编一起去了解下吧,想了解更多相关信息请持续关注我们应届毕业生考试网! 一.php,不用COM,生成excel文件 ...
- C#操作Excel文件暨C#实现在Excel中将连续多列相同数据项合并
C#操作Excel文件(读取Excel,写入Excel) 看到论坛里面不断有人提问关于读取excel和导入excel的相关问题.闲暇时间将我所知道的对excel的操作加以总结,现在共享大家,希望给大家 ...
- 详解Python操作Excel文件
前言 本篇文章主要总结了一下利用python操作Excel文件的第三方库和方法. 常见库简介 1.xlrd xlrd是一个从Excel文件读取数据和格式化信息的库,支持.xls以及.xlsx文件. 地 ...
- 很大的.xls 文件导入sqlserver2005导入不全_python3 接口测试数据驱动之操作 excel 文件...
python3 接口测试数据驱动之操作 excel 文件 1.4 操作 excel 文件 Python 中一般使用 xlrd 库来读取 Excel 文件, xlrd 库是 Python 的第三方库. ...
- java excel导出2007_java操作excel文件,实现批量导出,和导入
一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Exc ...
- csv文件怎么转成excel_Python操作Excel文件(1):花式大师pyexcel
本文共2900余字,预计阅读时间12分钟,本文知乎连接:Python操作Excel文件(1):花式大师pyexcel,本文同步发布于silaoA的博客和微信公众号平台. 关注学习了解更多的Cygwin ...
- Python+pywin32操作Excel文件常用功能(268行代码+注释)
全国高校教师Python课程高级研修班(线上,11月20-21日) 中国大学MOOC"Python程序设计基础"第5次开课 推荐图书: <Python程序设计(第3版)> ...
最新文章
- 【咸鱼教程】震屏效果
- Global Mapper总汇
- 【Netty】IO 模型简介 ( Netty 特点 | Netty 应用场景 | Java 三种 IO 模型 | BIO 模型 )
- VTK修炼之道38:图像平滑_中值滤波器
- linux shell之把文本里面的;替换成\n格式输出
- centos永久关闭防火墙
- lua与C++粘合层框架
- 消除左递归实验代码_「leetcode」669. 修剪二叉搜索树:【递归】【迭代】详解!
- idhttp.post方式 调用datasnap rest 远程方法(转咏南兄)
- 查看 Linux 中文件打开情况
- 解决 Error:No suitable device found: no device found for connection System eth0
- 3 docker容器
- 电脑编程工作工资多少?
- 自适应大邻域搜索算法
- homeassistant搭建_智能家居 篇二:Home Assistant简易智能家居环境搭建
- 管培生走下神坛,“高管捷径”破灭
- subplots_adjust()函数--matplotlib
- 宏观低速物理 '牛顿篇'
- java调用有参方法_java 带参方法调用
- 人脸识别——基于百度智能云实现