C#DataTable导出Excel,并实现合并单元格
asp.net webwofrm后台代码----------建议Framework4.0及以上,3.5试过出现好多莫名错误...
首先导入两个程序集。我的是 office2003,引用的COM里面的 Microsoft.office.Interop.Excel 14.0 和 程序集里的Microsoft Excel 12.0 Object Library。有多个版本,根据自己的office版本选择。
添加之后引用里力会出现两个DLL Microsoft.office.Core 和Microsoft.office.Interop.Excel
生成一下项目,如果出现 Excel.ApplicationClass()无法互嵌套操作类型 请改用适用的接口
把引用的Microsoft.Office.Interop.Excel 右击属性 嵌入互操作类型改为false即可
DataTable dt = new DataTable();
DataColumn dc1 = new DataColumn();
dc1.ColumnName = "name";
dc1.DataType = typeof(string);
DataColumn dc2 = new DataColumn();
dc2.ColumnName = "age";
dc2.DataType = typeof(int);
dt.Columns.Add(dc1);
dt.Columns.Add(dc2);
for (int i = ; i < ; i++)
{
DataRow dr = dt.NewRow();
dr[] = "茂茂" + i + "号";
dr[] = i;
dt.Rows.Add(dr);
}
new Class1().DataTabletoExcel(dt, DateTime.Now.Ticks+".xlsx");
先造些数据,然后将datatable和要导出文件名传递给方法。
DataTabletoExcel 方法体,一般的DataTable可以直接导出。比较复杂的结构需要自己定义
/// ///不要图省劲省略了System.Data。Microsoft.office.Interop.DataTable 和System.Data.DataTable 会产生歧义
public void DataTabletoExcel(System.Data.DataTable tmpDataTable, string strFileName)
{ ///先得到datatable的行数
int rowNum = tmpDataTable.Rows.Count;
///列数
int columnNum = tmpDataTable.Columns.Count;
///声明一个应用程序类实例
Application xlApp = new ApplicationClass(); //xlApp.DefaultFilePath = ""; ///默认文件路径,将其设置路径后发现没什么变化。导出excel的路径还是在参数strFileName里设置
//xlApp.DisplayAlerts = true;
//xlApp.SheetsInNewWorkbook = 1;///返回或设置 Microsoft Excel 自动插入到新工作簿中的工作表数目。Long 类型,可读写。设置为2之后没发现什么区别
//创建一个新工作簿
Workbook xlBook = xlApp.Workbooks.Add();
///在工作簿中得到sheet。
_Worksheet oSheet = (_Worksheet)xlBook.Worksheets[];
#region 绘制列
///自定义方法,想sheet中绘制列
RangeBuild(oSheet, "A1", "A2", "编号");
RangeBuild(oSheet, "B1", "B2", "畜主");
RangeBuild(oSheet, "C1", "C2", "地址");
RangeBuild(oSheet, "D1", "D2", "区划");
RangeBuild(oSheet, "E1", "E2", "规模");
RangeBuild(oSheet, "F1", "H1", "总存栏量");
RangeBuild(oSheet, "F2", "F2", "期初");
RangeBuild(oSheet, "G2", "G2", "期末");
RangeBuild(oSheet, "H2", "H2", "变更");
RangeBuild(oSheet, "I1", "K1", "母猪");
RangeBuild(oSheet, "I2", "I2", "期初");
RangeBuild(oSheet, "J2", "J2", "期末");
RangeBuild(oSheet, "K2", "K2", "变更");
RangeBuild(oSheet, "L1", "N1", "肉猪");
RangeBuild(oSheet, "L2", "L2", "期初");
RangeBuild(oSheet, "M2", "M2", "期末");
RangeBuild(oSheet, "N2", "N2", "变更");
RangeBuild(oSheet, "O1", "Q1", "仔猪");
RangeBuild(oSheet, "O2", "O2", "期初");
RangeBuild(oSheet, "P2", "P2", "期末");
RangeBuild(oSheet, "Q2", "Q2", "变更");
RangeBuild(oSheet, "R1", "T1", "公猪");
RangeBuild(oSheet, "R2", "R2", "期初");
RangeBuild(oSheet, "S2", "S2", "期末");
RangeBuild(oSheet, "T2", "T2", "变更");
RangeBuild(oSheet, "U1", "W1", "总面积");
RangeBuild(oSheet, "U2", "U2", "期初");
RangeBuild(oSheet, "V2", "V2", "期末");
RangeBuild(oSheet, "W2", "W2", "变更");
RangeBuild(oSheet, "X1", "Z1", "批建");
RangeBuild(oSheet, "X2", "X2", "期初");
RangeBuild(oSheet, "Y2", "Y2", "期末");
RangeBuild(oSheet, "Z2", "Z2", "变更");
RangeBuild(oSheet, "AA1", "AC1", "未批建");
RangeBuild(oSheet, "AA2", "AA2", "期初");
RangeBuild(oSheet, "AB2", "AB2", "期末");
RangeBuild(oSheet, "AC2", "AC2", "变更");
#endregion
//将DataTable中的数据导入Excel中
for (int i = ; i < rowNum; i++)
{ for (int j = ; j < columnNum; j++)
{
///excel中的列是从1开始的
xlApp.Cells[i+, j+] = tmpDataTable.Rows[i][j].ToString();
}
}
///保存,路径一块穿进去。否则回到一个很奇妙的地方,貌似是system32里 temp下....
oSheet.SaveAs(@"D:\a\" + strFileName);
} private static void RangeBuild(_Worksheet oSheet,string startcell,string endcell,string value)
{
///创建一个区域对象。第一个参数是开始格子号,第二个参数是终止格子号。比如选中A1——D3这个区域。
Range range = (Range)oSheet.get_Range(startcell, endcell);
///合并方法,0的时候直接合并为一个单元格
range.Merge();
///合并单元格之后,设置其中的文本
range.Value = value;
//横向居中
range.HorizontalAlignment = XlVAlign.xlVAlignCenter;
///字体大小
range.Font.Size = ;
///字体
range.Font.Name = "黑体";
///行高
range.RowHeight = ;
//自动调整列宽
range.EntireColumn.AutoFit();
//填充颜色
range.Interior.ColorIndex = ;
//设置单元格边框的粗细
range.Cells.Borders.LineStyle = ;
}
我这样导出的excel是这样子的
C#DataTable导出Excel,并实现合并单元格的更多相关文章
- C# 获取Excel中的合并单元格
C# 获取Excel中的合并单元格 我们在制作表格时,有时经常需要合并及取消合并一些单元格.在取消合并单元格时需要逐个查找及取消,比较麻烦.这里分享一个简单的方法来识别Excel中的合并单元格,识别这 ...
- C# 如何使用NPOI操作Excel以及读取合并单元格等
C#操作Excel方法有很多,以前用的需要电脑安装office才能用,但因为版权问题公司不允许安装office.所以改用NPOI进行Excel操作,基本上一些简单的Excel操作都没有问题,读写合并单 ...
- 【转载】jxl操作excel 字体 背景色 合并单元格 列宽等 .
package com.email.jav; import java.io.File;import java.io.IOException;import java.net.URL; import jx ...
- java使用freemarker模板导出word(带有合并单元格)文档
来自:https://blog.csdn.net/qq_33195578/article/details/73790283 前言:最近要做一个导出word功能,其实网上有很多的例子,但是我需要的是合并 ...
- 填报表导出excel非可写单元格锁定问题
问题描述: 填报表单元格分为可写和不可写两种状态,当填报表在web上展现的时候可写单元格可以进行数据填报和修改,非可写单元格不可操作. 报表导出为excel时,润乾导出excel包默认情况下不对 ...
- NPOI导出Excel文件,对单元格的一些设置
HSSFWorkbook book = new HSSFWorkbook(); MemoryStream ms = new MemoryStream(); ISheet sheet = book.Cr ...
- EXCEL自动撤销合并单元格并填充相应内容(转帖)
若EXCEL工作表有很多合并的单元格,要将所有合并的单元格撤销,并填充撤销合并前显示的内容,这是一项很繁琐且容易出错的工作.但可通过宏程序可轻松准确地搞定,方法如下: 一.实现该功能的Excel宏程序 ...
- 使用poi导出Excel,并设定单元格内容类型,抛出异常
本例子使用的是HSSF,为Excel2003提供处理方案. 设定为输入类型为数值 import org.apache.poi.hssf.usermodel.DVConstraint; import o ...
- Java导出Excel表,POI 实现合并单元格以及列自适应宽度(转载)
POI是apache提供的一个读写Excel文档的开源组件,在操作excel时常要合并单元格,合并单元格的方法是: sheet.addMergedRegion(new CellRangeAddress ...
- [办公应用]如何将excel合并单元格分拆后每个单元格上仍保留数据?
合并单元格虽然美观,但是无法进行排序.筛选等操作. 只有合并单元格拆分后才可以按常规进行统计.但是普通拆分后,excel仅保留合并单元格数据到区域左上角的单元格. 解决方案:选定多个合并单元格,应用本 ...
随机推荐
- Linux下ping: unknown host www.baidu.com的解决办法
如果ping域名的时候出现ping:unknown host xxx.xxx 但是ping IP地址的时候可以通的话 可知是dns服务器没有配置好, 查看一下配置文件/etc/resolv.conf ...
- USACO4.4 Shuttle Puzzle【bfs+优化】
直接上$bfs$,每一个状态记录下当前字符串的样子,空格的位置,和走到这个状态的答案. 用空格的位置转移,只有$50pts$ 考虑到题目一个性质:$W$只往右走,$B$只往左走,就可以过了. #inc ...
- 【并行计算-CUDA开发】Apple's OpenCL——再谈Local Memory
在OpenCL中,用__local(或local)修饰的变量会被存放在一个计算单元(Compute Unit)的共享存储器区域中.对于nVidia的GPU,一个CU可以被映射为物理上的一块SM(Str ...
- 【图像处理】H.264简介
H.264/MPEG-4 AVC(H.264)是1995年自MPEG-2视频压缩标准发布以后的最新.最有前途的视频压缩标准.H.264是由ITU-T和ISO/IEC的联合开发组共同开发的最新国际视频编 ...
- Git centos 安装
Git 安装 Centos 下安装 Git,默认在 CentOS 下,我们可以通过 yum 的方式来安装 Git root@ci‐node1 ~]# yum install git –y root@c ...
- libmkl 学习笔记
libmkl 学习笔记 1.libkml下载地址为: https://github.com/libkml/libkml/releases 这里下载1.3.0版本 2.编译与安装 mkdir build ...
- hdu 3473 区间条件极值 - 区间 差的绝对值 之和的最小
题目传送门//res tp hdu 目的 对长度为n的区间,给定q个子区间,求一x,使得区间内所有元素与x的差的绝对值之和最小. 多测. n 1e5 q 1e5 ai [1,1e9] (i∈[1,n] ...
- 菜单中Clean和batch build的作用
清除Build生成的中间文件,删除编译的文件 编译的不一样,有重新编译和普通编译,重新编译会删除以前生成的文件
- 归并排序+归并排序求逆序对(例题P1908)
归并排序(merge sort) 顾名思义,这是一种排序算法,时间复杂度为O(nlogn),时间复杂度上和快排一样 归并排序是分治思想的应用,我们先将n个数不断地二分,最后得到n个长度为1的区间,显然 ...
- php socket 编程读写函数
fwrite() 二进制安全 end条件[string写完/length-1]; fputs() fwrite()的别名; fread() 二进制安全,end条件[一个可用包/EOF/length-1 ...