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,并实现合并单元格的更多相关文章

  1. C# 获取Excel中的合并单元格

    C# 获取Excel中的合并单元格 我们在制作表格时,有时经常需要合并及取消合并一些单元格.在取消合并单元格时需要逐个查找及取消,比较麻烦.这里分享一个简单的方法来识别Excel中的合并单元格,识别这 ...

  2. C# 如何使用NPOI操作Excel以及读取合并单元格等

    C#操作Excel方法有很多,以前用的需要电脑安装office才能用,但因为版权问题公司不允许安装office.所以改用NPOI进行Excel操作,基本上一些简单的Excel操作都没有问题,读写合并单 ...

  3. 【转载】jxl操作excel 字体 背景色 合并单元格 列宽等 .

    package com.email.jav; import java.io.File;import java.io.IOException;import java.net.URL; import jx ...

  4. java使用freemarker模板导出word(带有合并单元格)文档

    来自:https://blog.csdn.net/qq_33195578/article/details/73790283 前言:最近要做一个导出word功能,其实网上有很多的例子,但是我需要的是合并 ...

  5. 填报表导出excel非可写单元格锁定问题

     问题描述: 填报表单元格分为可写和不可写两种状态,当填报表在web上展现的时候可写单元格可以进行数据填报和修改,非可写单元格不可操作. 报表导出为excel时,润乾导出excel包默认情况下不对 ...

  6. NPOI导出Excel文件,对单元格的一些设置

    HSSFWorkbook book = new HSSFWorkbook(); MemoryStream ms = new MemoryStream(); ISheet sheet = book.Cr ...

  7. EXCEL自动撤销合并单元格并填充相应内容(转帖)

    若EXCEL工作表有很多合并的单元格,要将所有合并的单元格撤销,并填充撤销合并前显示的内容,这是一项很繁琐且容易出错的工作.但可通过宏程序可轻松准确地搞定,方法如下: 一.实现该功能的Excel宏程序 ...

  8. 使用poi导出Excel,并设定单元格内容类型,抛出异常

    本例子使用的是HSSF,为Excel2003提供处理方案. 设定为输入类型为数值 import org.apache.poi.hssf.usermodel.DVConstraint; import o ...

  9. Java导出Excel表,POI 实现合并单元格以及列自适应宽度(转载)

    POI是apache提供的一个读写Excel文档的开源组件,在操作excel时常要合并单元格,合并单元格的方法是: sheet.addMergedRegion(new CellRangeAddress ...

  10. [办公应用]如何将excel合并单元格分拆后每个单元格上仍保留数据?

    合并单元格虽然美观,但是无法进行排序.筛选等操作. 只有合并单元格拆分后才可以按常规进行统计.但是普通拆分后,excel仅保留合并单元格数据到区域左上角的单元格. 解决方案:选定多个合并单元格,应用本 ...

随机推荐

  1. TCP\IP协议实践:wireshark抓包分析之链路层与网络层

    目录 TCP\IP协议实践:wireshark抓包分析之链路层与网络层 从ping开始 链路层之以太网封装 ip首部 开启ping程序,开始抓包 由一个ping的结果引出来的两个协议ARP ICMP ...

  2. poj1741(入门点分治)

    题目链接:https://vjudge.net/problem/POJ-1741 题意:给出一棵树,求出树上距离不超过k的点对数量. 思路:点分治经典题.先找重心作为树根,然后求出子树中所有点到重心的 ...

  3. 【Python】【demo实验20】【练习实例】【寻找“完数”】

    原题: 一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程找出1000以内的所有完数. 我的代码: #!/usr/bin/python # encodi ...

  4. (5.14)mysql高可用系列——级联复制与多主一从

    目录: [0]实验需求 级联复制,201为主库,202为从库/同时为203的主库,203为202的从库[1]实验环境 级联:A->B->C 实践思路: (1)直接拿A的xtrabackup ...

  5. 【LOJ】#3032. 「JOISC 2019 Day1」馕

    LOJ#3032. 「JOISC 2019 Day1」馕 处理出每个人把馕切成N段,每一段快乐度相同,我们选择第一个排在最前的人分给他的第一段,然后再在未选取的的人中选一个第二个排在最前的切一下,并把 ...

  6. 【LOJ】#2985. 「WC2019」I 君的商店

    LOJ#2985. 「WC2019」I 君的商店 一道很神仙的题啊QAQ 居然是智商题--不是乱搞或者是大数据 我们可以用2N问出一个最大值是1 然后对于任意两个值\(x + y\)和\(a\)比较 ...

  7. JSP与Servlet之间的交互,传值

    一.Servlet 首先要明白一点,servlet需要容器的支持才能够运行,如Tomcat.jetty 达到servlet的请求,需要ServletRequest对象和ServletResponse对 ...

  8. Python学习8——魔法方法、特性和迭代器

    Python中很多名称比较古怪,开头和结尾都是两个下划线.这样的拼写表示名称有特殊意义,因此绝不要在程序中创建这样的名称.这样的名称中大部分都是魔法(方法)的名称.如果你的对象实现了这些方法,他们将在 ...

  9. DL4J中文文档/Keras模型导入/函数模型

    导入Keras函数模型 假设使用Keras的函数API开始定义一个简单的MLP: from keras.models import Model from keras.layers import Den ...

  10. pb datawindow 类型

    DataWindow.Processing 判断 DataWindow 对象的类型 可用 DataWindow.Processing 判断 DataWindow 对象的类型,dw的类型如下:     ...