.Net用DataTable导出Excel通用函数

news/2024/7/21 3:55:41 标签: excel, .net, generation, null, exception, float

1,首先要导入Com文件Microsoft Excel 11.0 Object Library.
2,要添加Interop.Excel.dll文件
http://files.cnblogs.com/ghostljj/Interop.Excel.rar
3.执行下面步骤
   /// <summary>
    /// 导出Excel
    /// </summary>
    /// <param name="dt">要导出的DataTable</param>
    public void ExportToExcel(System.Data.DataTable dt)
    {
        if (dt == null) return;
        Excel.Application xlApp = new Excel.Application();
        if (xlApp == null)
        {
            // lblMsg.Text = "无法创建Excel对象,可能您的机子未安装Excel";
            lblMsg.Text = GetLocalResourceObject("noexcel").ToString();
            return;
        }
        Excel.Workbooks workbooks = xlApp.Workbooks;
        Excel.Workbook workbook = workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
        Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
        Excel.Range range = null;
        long totalCount = dt.Rows.Count;
        long rowRead = 0;
        float percent = 0;

        //写入标题
        for (int i = 0; i < dt.Columns.Count; i++)
        {
            worksheet.Cells[1, i + 1] = dt.Columns[i].ColumnName;
            range = (Excel.Range)worksheet.Cells[1, i + 1];
            //range.Interior.ColorIndex = 15;//背景颜色
            range.Font.Bold = true;//粗体
            range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;//居中
            //加边框
            range.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, null);
            //range.ColumnWidth = 4.63;//设置列宽
            //range.EntireColumn.AutoFit();//自动调整列宽
            //r1.EntireRow.AutoFit();//自动调整行高

        }
        //写入内容
        for (int r = 0; r < dt.Rows.Count; r++)
        {
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                worksheet.Cells[r + 2, i + 1] = dt.Rows[r][i];
                range = (Excel.Range)worksheet.Cells[r + 2, i + 1];
                range.Font.Size = 9;//字体大小
                //加边框
                range.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, null);
                range.EntireColumn.AutoFit();//自动调整列宽
            }
            rowRead++;
            percent = ((float)(100 * rowRead)) / totalCount;
            System.Windows.Forms.Application.DoEvents();
        }

        range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].Weight = Excel.XlBorderWeight.xlThin;
        if (dt.Columns.Count > 1)
        {
            range.Borders[Excel.XlBordersIndex.xlInsideVertical].Weight = Excel.XlBorderWeight.xlThin;
        }

        try
        {
            workbook.Saved = true;
            workbook.SaveCopyAs(System.Web.HttpRuntime.AppDomainAppPath + "XMLFiles//EduceWordFiles//" + this.Context.User.Identity.Name + ".xls");
        }
        catch (Exception ex)
        {
            //lblMsg.Text = "导出文件时出错,文件可能正被打开!/n" + ex.Message;
            lblMsg.Text = GetLocalResourceObject("error").ToString() + "/n" + ex.Message;
        }


        workbooks.Close();
        if (xlApp != null)
        {
            xlApp.Workbooks.Close();

            xlApp.Quit();

            int generation = System.GC.GetGeneration(xlApp);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);

            xlApp = null;
            System.GC.Collect(generation);
        }
        GC.Collect();//强行销毁

        #region 强行杀死最近打开的Excel进程
        System.Diagnostics.Process[] excelProc = System.Diagnostics.Process.GetProcessesByName("EXCEL");
        System.DateTime startTime = new DateTime();
        int m, killId = 0;
        for (m = 0; m < excelProc.Length; m++)
        {
            if (startTime < excelProc[m].StartTime)
            {
                startTime = excelProc[m].StartTime;
                killId = m;
            }
        }
        if (excelProc[killId].HasExited == false)
        {
            excelProc[killId].Kill();
        }
        #endregion


        //提供下载
        BIClass.BusinessLogic.Util.ResponseFile(Page.Request, Page.Response, "ReportToExcel.xls"
            , System.Web.HttpRuntime.AppDomainAppPath + "XMLFiles//EduceWordFiles//" + this.Context.User.Identity.Name + ".xls", 1024000);
    }


//--------------------------------------------------------
4.如果是放在IIS中,现在是不能到出的,还要配置一下
方案一:在Web.config中添加
         <system.web>
               <identity impersonate="true" userName="管理员名" password="密码" />
         <system.web>
方案二:
         (1)在运行->dcomcnfg打开组件服务
         (2) 在 控制台根目录->组件服务->计算机->我的电脑->DCOM配置->Microsoft Excel应用程序->属性->安全
         (3)启动和激活权限->使用自定义->添加一个ASPNET用户,还有打开本地启动本地激活
              访问权限->使用自定义->添加一个ASPNET用户,还有打开本地访问远程访问


http://www.niftyadmin.cn/n/1412370.html

相关文章

分布式计算细节

数据库的设计还是要结合业务模式来分析&#xff0c;例如OLTP通常采用航储存&#xff0c;OLAP通常采用列储存等等。 如果等值查询较多的话&#xff0c;那么按照哈希存储数据比较好&#xff1b;如果范围查询较多的话&#xff0c;那么按照有序数组储存数据比较好。 聚合操作&…

ELK

E&#xff1a;Elasticsearch 基于开源分布式搜索引擎Lucene实现&#xff0c;接近实时&#xff08;NRT&#xff0c;Near Realtime&#xff09;的搜索平台 基本概念 Cluster - Node&#xff1a;集群 - 节点 Index&#xff1a;索引 Document&#xff1a;文档&#xff0c;可以被索引…

C#合并多个结构一样的Excel

合并代码如下&#xff1a;using System;using System.Collections.Generic;using System.Text;using System.Reflection;using Excel Microsoft.Office.Interop.Excel;namespace ConsoleApplication20{ //添加引用-COM-MicroSoft Excel 11.0 Object Libery class Progra…

Sketch插件开发入门

插件结构 http://developer.sketchapp.com/introduction/plugin-bundles/ sketch 插件就是脚本的集合。每个脚本定义了一个或者多个命令。这些命令可以拓展sketch的功能。sketch插件以 .sketchplugin结尾,其实就是个文件夹&#xff0c;把后缀删除后可以直接打开。 example.sket…

C#与EXCEL的数据交互(一)

首先说明&#xff0c;我不是程序员&#xff0c;也不是科班出身&#xff0c;只是因为工作中需要管理比较多的数据&#xff0c;而 数据又需要留存备查&#xff0c;公司也没有符合要求的系统&#xff0c;于是萌发了开发一个数据管理系统的想法。根据自身的爱好&#xff0c;在不需公…

JVM致命错误日志(hs_err_pid.log)解读

为什么80%的码农都做不了架构师&#xff1f;>>> 致命错误出现的时候&#xff0c;JVM生成了hs_err_pid<pid>.log这样的文件&#xff0c;其中往往包含了虚拟机崩溃原因的重要信息。因为 经常遇到&#xff0c;在这篇文章里&#xff0c;我挑选了一个&#xff0c;…

2019年七月第三周总结

快速阅读 回顾本周对于Tuxedo中间件&#xff0c;welloigc中间件使用的调查 &#xff0c;以及系统设计时如何画时序图&#xff0c;数据流图&#xff0c;ERD图 最后介绍一个事件的使用MenualResetEvent Tuxedo 是oracle推出的一个中间件服务&#xff0c; 采用Tuxedo协议进行通讯&…