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仅保留合并单元格数据到区域左上角的单元格. 解决方案:选定多个合并单元格,应用本 ...
随机推荐
- Int8,Int16,Int32,Int64 有啥不同呢?看了立马就懂!
大家有没有写了很久代码,还不知道这个Int8,Int16, Int32, Int64有什么区别呢?或者是为什么后面的数字不一样呢? 初步了解了一下,才清楚这个东西. 先来扫盲一下计算机存储单元, 在计 ...
- nginx 代理 registry docker certificate is valid for k8s, not
1.配置SSL证书及nginx反向代理docker registry 搭建私有CA,初始化CA环境,在/etc/pki/CA/下建立证书索引数据库文件index.txt和序列号文件serial,并为证 ...
- 查询统计SQL分组求和使用小技巧
我们在做查询统计时,肯定会遇到将查询结果再次分组求和这种需求,但是往往查询的sql本身就比较复杂,再使用分组函数不太可能,那么这时候我们就想到了用临时表的办法,通过联合临时表我们就可以获得想要的分组求 ...
- Android Application的基本组件介绍
一个Android应用通常由一个或多个基本组件组成,常用的一般有Activity.Service.BroadcastReceiver.ContentProvider.Intent等等. ⒈Activi ...
- VirtualBox网络之仅主机(Host-Only)网络
https://blog.csdn.net/dkfajsldfsdfsd/article/details/79441874
- git的常用指令(一)
1. 查看git远程的所有分支 git branch -a 2.查看本地已有的分支 git branch 3.本地检出一个新的分支并推送到远程仓库 一).创建本地分支 git checkout -b ...
- EasyUI_DataGrid数据操作
1.html: <div style="width: 1100px;height: 350px ;overflow: scroll"> <table id=&qu ...
- 移动端真机debug调试神器 vConsole学习(一)之基础
参考 使用方法 移动端真机debug调试神器 vConsole的引入说明(原生态与WebPack) 移动端使用vconsole调试console vConsole ——开源的前端 console 调试 ...
- 佳能单反SDK 步骤
EdsInitializeSDK(); EdsGetCameraList(&eclr);//获取相机列表 EdsGetChildCount(eclr, &camCount); //获 ...
- java实现spark常用算子之Take
import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...