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仅保留合并单元格数据到区域左上角的单元格. 解决方案:选定多个合并单元格,应用本 ...
随机推荐
- TCP\IP协议实践:wireshark抓包分析之链路层与网络层
目录 TCP\IP协议实践:wireshark抓包分析之链路层与网络层 从ping开始 链路层之以太网封装 ip首部 开启ping程序,开始抓包 由一个ping的结果引出来的两个协议ARP ICMP ...
- Linux操作系统原理笔记
在Linux操作系统内核内部,进程是通过一个链表,而且是一个双向链表来管理的. 进程描述符:每一个进程都有其描述符,每一个描述符彼此之间都有关联性的. 双向链表: 一个进程内部可能包含多个线程 ...
- autossh
LDAP:用old HK login SSH转发:/root/.nat_rules/opay-new root@ldap opay-new]# cat maria1-dw-60000 #!/bin/b ...
- Linux多线程编程 - sleep 和 pthread_cond_timedwait
#include <stdio.h> #include <stdlib.h> int flag = 1; void * thr_fn(void * arg) { while ...
- Daily Temperatures
Given a list of daily temperatures T, return a list such that, for each day in the input, tells you ...
- P1062 数列 题解
(题目为啥要强调用十进制输出呢,明明就是故意提醒) 分析一下样例 k=3k=3时,数列为:1,3,4,9,10,12,13..1,3,4,9,10,12,13.. 转换成三进制就是:1,10,11,1 ...
- print格式化输出(format)
一. print格式化输出,以及使用format控制 字符串的格式化方法分为两种,分别为占位符(%)和format方式.占位符方式在Python2.x中用的比较广泛,随着Python3.x的使用越来越 ...
- with上下文管理 python魔法方法
with语法在Python里很常见, 主要的利好是使用代码更简洁. 常见的使用场景有: 1. 资源对象的获取与释放. 使用with可以简化try...finally ... 2. 在不修改函数代码的前 ...
- Git 入门:概念、原理、使用
出处: git入门:概念.原理.使用 git和Github 概念 Git --- 版本控制工具(命令). git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.git ...
- Mysql-Sqlalchemy-ORM-many_to_many
orm_m2m.py from sqlalchemy import Table,Column,Integer,String,DATE, ForeignKey from sqlalchemy.orm i ...