asp.net(C#) Excel导出类 导出.xls文件
---恢复内容开始---
using Microsoft.Office.Interop.Excel;
针对office 2003需添加引用Microsoft Excel 11.0 Object Library
如添加之后还不能用再using microsoft.office.core和excel
引用的dll为
Interop.Microsoft.Office.Core.dll
Interop.Excel.dll
Excel导出类:
using System; using System.IO; using System.Data; using Microsoft.Office.Interop.Excel; /// <summary> /// 导出Excal文件 /// </summary> public class ImportExcel { private string title; private string rpt_name; private string outFilePath; private System.Data.DataTable dt; private System.Data.DataTable outTable; public ImportExcel() { } /// <summary> /// 设置Excel标题 /// </summary> public string rptName { get { return title; } set { title = value; } } /// <summary> /// 需要导入EXCEL的表 /// </summary> public System.Data.DataTable RptData { get { return dt; } set { dt = value; } } /// <summary> /// 设置输出文件的存放位置 /// </summary> public string OutFilePath { get { return outFilePath; } set { outFilePath = value; } } /// <summary> /// 构造函数,使用该类需传入Excel标题,DataTable,文件的存放路径 /// </summary> /// <param name="rptName">要设置的Excel标题</param> /// <param name="dtable">要填充Excel的表</param> /// <param name="FilePath">要存放的路径</param> public ImportExcel( string rptName, System.Data.DataTable dtable, string file_path) { rpt_name = rptName; outTable = dtable; outFilePath = file_path; try { this .InsertExcel(); } catch (Exception e) { throw new Exception(e.Message); } } /// <summary> /// 该函数向Excel表中插入记录,要插入的数据为一个内存表.其中内存表中的列名为表中的列名 /// 该函数所使用的动态连接库Excel.dll,Office.dll,VBIDE.dll. /// </summary> public void InsertExcel() { int col_count = 0; int row_count = 0; int k = 0; int l = 0; //检查文件是否存在 if (File.Exists(outFilePath)) { throw new Exception( "文件已存在,创建失败!" ); } Microsoft.Office.Interop.Excel.ApplicationClass rptApp = new Microsoft.Office.Interop.Excel.ApplicationClass(); rptApp.Application.Workbooks.Add( true ); rptApp.Visible = false ; object missing = System.Reflection.Missing.Value; Microsoft.Office.Interop.Excel.Workbook rptBook = rptApp.Workbooks[1]; Microsoft.Office.Interop.Excel.Worksheet rptSheet = (Microsoft.Office.Interop.Excel.Worksheet)rptBook.ActiveSheet; //设置报表的标题 rptSheet.Cells[1, 1] = rpt_name; //插入列标题 foreach (DataColumn col in outTable.Columns) { col_count++; rptSheet.Cells[2, col_count] = col.ColumnName.ToString(); } //设置列标题格式 rptSheet.get_Range(rptSheet.Cells[2, 1],rptSheet.Cells[2, col_count]).Font.Bold = true ; // 是否加粗:是 //设置单元格的格式 foreach (DataRow dr in outTable.Rows) { row_count++; col_count = 0; foreach (DataColumn col in outTable.Columns) { col_count++; if (col.DataType == System.Type.GetType( "System.String" )) { rptSheet.get_Range(rptSheet.Cells[1, 1], rptSheet.Cells[row_count + 2, col_count]).NumberFormatLocal = "@" ; } else if (col.DataType == System.Type.GetType( "System.DateTime" )) { rptSheet.get_Range(rptSheet.Cells[1, 1], rptSheet.Cells[row_count + 2, col_count]).NumberFormatLocal = "yyyy-m-d" ; } } } //向报表插入记录 for ( int i = 0; i < outTable.Rows.Count; i++) { for ( int j = 0; j < outTable.Columns.Count; j++) { k = i + 3; l = j + 1; rptSheet.Cells[k, l] = outTable.Rows[i][j].ToString(); rptSheet.get_Range(rptSheet.Cells[1, l], rptSheet.Cells[1, l]).Borders.LineStyle = 7; rptSheet.get_Range(rptSheet.Cells[2, l], rptSheet.Cells[2, l]).Borders.LineStyle = 1; rptSheet.get_Range(rptSheet.Cells[k, l], rptSheet.Cells[k, l]).Borders.LineStyle = 1; } } //设置标题的格式 rptSheet.get_Range(rptSheet.Cells[1, 1], rptSheet.Cells[1, 1]).Font.Bold = true ; rptSheet.get_Range(rptSheet.Cells[1, 1], rptSheet.Cells[1, 1]).Font.Size = 22; //设置报表的标题为跨列居中合并单元格 rptSheet.get_Range(rptSheet.Cells[1, 1], rptSheet.Cells[1, col_count]).Select(); rptSheet.get_Range(rptSheet.Cells[1, 1], rptSheet.Cells[1, col_count]).HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenterAcrossSelection; //设置报表表格为最适应宽度 rptSheet.get_Range(rptSheet.Cells[1, 1], rptSheet.Cells[row_count, col_count]).Select(); rptSheet.get_Range(rptSheet.Cells[1, 1], rptSheet.Cells[row_count, col_count]).Columns.AutoFit(); //另存文件到指定路径下 rptBook.SaveAs(outFilePath, missing, missing, missing, missing, missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing, missing); //关闭文件 rptBook.Close( false , outFilePath, true ); rptApp.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(rptSheet); System.Runtime.InteropServices.Marshal.ReleaseComObject(rptBook); System.Runtime.InteropServices.Marshal.ReleaseComObject(rptApp); //强制释放无用资源 GC.Collect(); } } |
错误:检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。
解决方法一:
控制面板-》管理工具-》组件服务-》计算机-》我的电脑-》DCom配置-》找到Microsoft Excel 应用程序
之后
单击属性打开此应用程序的属性对话框。
2. 单击标识选项卡,然后选择交互式用户。
3.单击"安全"选项卡,分别在"启动和激活权限"和"访问权限"组中选中"自定义",然后
自定义->编辑->添加ASP.NET账户和IUSER_计算机名: 需要本地激活,和本地访问两个权限
4."标识"选项卡 选择交互式用户
---恢复内容结束---
asp.net(C#) Excel导出类 导出.xls文件的更多相关文章
- 用javah 导出类的头文件, 常见的错误及正确的使用方法
******************************************************************************** 用javah 导出类的头文件, 常见的 ...
- Java解析Excel工具类(兼容xls和xlsx)
依赖jar <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml&l ...
- Asp .Net Core Excel导入和导出
ASP .Net Core使用EPPlus实现Api导入导出,这里使用是EPPlus 4.5.2.1版本,.Net Core 2.2.在linux上运行的时候需要安装libgdiplus . 下面我们 ...
- C#:导入Excel通用类(Xls格式)
PS:在CSV格式和XLSX格式中有写到通用调用的接口和引用的插件,所以在这个xls格式里面并没有那么详细,只是配上xls通用类. 一.引用插件NPOI.dll.NPOI.OOXML.dll.NPOI ...
- Android 导入导出CSV,xls文件 .
1 . http://www.bangchui.org/read.php?tid=62 2 .http://blog.csdn.net/xinzheng_wang/article/details/77 ...
- winform NPOI excel 导出并选择保存文件路径
public void ExcelOp(DataGridView gdv,ArrayList selHead) { if (selHead.Count==0) { MessageBox.Show(&q ...
- php中使用PHPExcel读写excel(xls)文件的方法
首先从GitHub上下载 excel的相关类库 下载地址:https://github.com/PHPOffice/PHPExcel 以下是从excel中获取数据 <?php /** * * @ ...
- 导入导出Excel工具类ExcelUtil
前言 前段时间做的分布式集成平台项目中,许多模块都用到了导入导出Excel的功能,于是决定封装一个ExcelUtil类,专门用来处理Excel的导入和导出 本项目的持久化层用的是JPA(底层用hibe ...
- MVC NPOI Linq导出Excel通用类
之前写了一个模型导出Excel通用类,但是在实际应用中,可能不是直接导出模型,而是通过Linq查询后获取到最终结果再导出 通用类: public enum DataTypeEnum { Int = , ...
随机推荐
- CSS中浏览器开发商特定的CSS属性
浏览器制造商(像Microsoft.Mozilla等,还有WebKit的后台人员等)通常会为他们的浏览器增加新的功能来测试新的特性, 或者实现一直在考虑但还没有得到标准组织批准的CSS扩展.在这些情况 ...
- VC++ 对话框程序响应键盘消息的处理方法的说明(非常重要)
基于MFC对话框的应用程序在响应按键消息和热键方面都力不从心,CDialog类的消息循环中去掉了TranslateAccelerator函数,因此不能响应热键:同时由于对话框上可能有很多控件,且默认情 ...
- PL/SQL EO 设计与开发
1.INSERT 调用PL/SQL 去insert的时候,没有使用super(),此时应当自己创建callable statement: 调用checkErrors()方法在执行 callable s ...
- 【补充版】HashMap(根据value筛选查找)
HashMap查找之根据Value查找 一般大家都知道对于HashMap而言都是通过key来进行查找.找到了key自然对应的value也就一并找到了.但是有些情况下就需要通过value来进行判断查找. ...
- 关于有偿提供拼图响应式后台的通知---------pintuer ui的官方通知(www.pintuer.com)
拼图响应式前端框架版响应式后台正式发布. 考虑到目前拼图的状况,我们不打算免费开放下载,但也不会收各位朋友1分钱,该版后台将有偿提供给各位给予拼图贡献的朋友. 废话不多说,一切皆以有图有真相,下面上图 ...
- 双系统下(Ubuntu + win7)windows 无法连接无线网络
双系统下(Ubuntu + win7)windows 无法连接无线网络 今天开机登录win7,突然发现无法使用无线网络(WiFi信号标志有个大红叉),于是查看设备驱动,一切正常,这就奇怪了:用Wind ...
- 初探C++Primer(15.面向对象程序设计)
最近在恶补OOP相关知识,很遗憾学校的课没选上,于是只能上网购进C++Primer一本,开始重学C++之旅... (壮哉我大ZJU,网购半天到货XDD) 学习路线 7.类->13.类设计者的工具 ...
- Spring——(一)IoC
1. 什么是IOC IOC:inversion of Control 控制反转. 控制反转:即控制权由应用程序代码转到了外部容器.(反转:就是控制权的转移).--降低业务对象之间的依赖程度,即实现了解 ...
- hdu 1299 Diophantus of Alexandria (数论)
Diophantus of Alexandria Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- Web UI自动化测试中绕开验证码登陆方式浅谈
web自动化测试中让测试者感到困惑的是登陆验证码,每次都不一样.现在推荐一种绕开验证码登陆的方式,其实就是将web浏览器获取的登陆cookie加载到程序中就可以了,这样程序就会认为你已经登陆,就可以跳 ...