C# WinForm导出Excel方法介绍

.NET开发人员首选的方法,通过COM组件调用Office软件本身来实现文件的创建和读写,但是数据量较大的时候异常缓慢;如下代码所示已经做了优化,将一个二维对象数组赋值到一个单元格区域中(下面的代码中只能用于导出列数不多于26列的数据导出):

Office PIA



复制代码 代码如下:

public static void ExportToExcel(DataSet dataSet, string outputPath)
{
    Excel.ApplicationClass excel = new Excel.ApplicationClass();
    Excel.Workbook workbook = excel.Workbooks.Add(Type.Missing);
    int sheetIndex = 0;
    foreach (System.Data.DataTable dt in dataSet.Tables)
    {
        object[,] data = new object[dt.Rows.Count + 1, dt.Columns.Count];
        for (int j = 0; j < dt.Columns.Count; j++)
        {
            data[0, j] = dt.Columns[j].ColumnName;
        }
        for (int j = 0; j < dt.Columns.Count; j++)
        {
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                data[i + 1, j] = dt.Rows[i][j];
            }
        }
        string finalColLetter = string.Empty;

string colCharset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        int colCharsetLen = colCharset.Length;
        if (dt.Columns.Count > colCharsetLen)
        {
            finalColLetter = colCharset.Substring(
                (dt.Columns.Count - 1) / colCharsetLen - 1, 1);
        }
        finalColLetter += colCharset.Substring(
                (dt.Columns.Count - 1) % colCharsetLen, 1);

Excel.Worksheet sheet = (Excel.Worksheet)workbook.Sheets.Add(
            workbook.Sheets.get_Item(++sheetIndex),
            Type.Missing, 1, Excel.XlSheetType.xlWorksheet);
        sheet.Name = dt.TableName;
        string range = string.Format("A1:{0}{1}", finalColLetter, dt.Rows.Count + 1);
        sheet.get_Range(range, Type.Missing).Value2 = data;
        ((Excel.Range)sheet.Rows[1, Type.Missing]).Font.Bold = true;
    }
    workbook.SaveAs(outputPath, Excel.XlFileFormat.xlWorkbookNormal, Type.Missing,
        Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlExclusive,
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
    workbook.Close(true, Type.Missing, Type.Missing);
    workbook = null;
    excel.Quit();
    KillSpecialExcel(excel);
    excel = null;
    GC.Collect();
    GC.WaitForPendingFinalizers();
}

[DllImport("user32.dll", SetLastError = true)]
static extern int GetWindowThreadProcessId(IntPtr hWnd, out int processId);

static void KillSpecialExcel(Excel.Application app)
{
    try
    {
        if (app != null)
        {
            int processId;
            GetWindowThreadProcessId(new IntPtr(app.Hwnd), out processId);
            System.Diagnostics.Process.GetProcessById(processId).Kill();
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

文件流

这种方法的效率明显高于第一种,而且也不需要安装Office,但是导出的xls文件并不符合Excel的格式标准,在打开生成的xls文件时会提示:The file you are trying to open is in a different format that specified by the file extension. Verify that the file is not corrupted and is from a trusted source before opening the file.

复制代码 代码如下:

public static void ExportToExcel(System.Data.DataSet ds, string path)
{
    StreamWriter sw = null;
    try
    {
        long totalCount = ds.Tables[0].Rows.Count;
        sw = new StreamWriter(path, false, Encoding.Unicode);
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
        {
            sb.Append(ds.Tables[0].Columns[i].ColumnName + "\t");
        }
        sb.Append(Environment.NewLine);
        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
        {
            for (int j = 0; j < ds.Tables[0].Columns.Count; j++)
            {
                sb.Append(ds.Tables[0].Rows[i][j].ToString() + "\t");
            }
            sb.Append(Environment.NewLine);
        }
        sw.Write(sb.ToString());
        sw.Flush();
    }
    catch (IOException ioe)
    {
        throw ioe;
    }
    finally
    {
        if (sw != null)
        {
            sw.Close();
        }
    }
}

时间: 2013-12-01

C#如何将DataTable导出到Excel解决方案

最近,由于公司项目中需要将系统内用户操作的所有日志进行转存备份,考虑到以后可能还需要还原,所以最后决定将日志数据备份到Excel中. 下面是我项目当中Excel.cs这个类的全部代码,通过这个类可以很容易地将DataTable中的数据导入到Excel方法中. 首先,必须要下载NPOI.dll这个程序集, 类代码如下: 复制代码 代码如下: using System; using NPOI.HSSF; using NPOI.HPSF; using NPOI.HSSF.UserModel; usin

C#数据导入/导出Excel文件及winForm导出Execl总结

一.asp.net中导出Execl的方法: 在asp.net中导出Execl有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址输出在浏览器上:一种是将文件直接将文件输出流写给浏览器.在Response输出时,\t分隔的数据,导出execl时,等价于分列,\n等价于换行. 1.将整个html全部输出execl 此法将html中所有的内容,如按钮,表格,图片等全部输出到Execl中. 复制代码 代码如下: Response.Clear(); Response.Buffer= t

C#导入导出EXCEL文件的代码实例

复制代码 代码如下: using System;using System.Data;using System.Data.OleDb; namespace ZFSoft.Joint{    public class ExcelIO    {        private int _ReturnStatus;        private string _ReturnMessage; /// <summary>        /// 执行返回状态        /// </summary&g

C#导出Excel的示例详解

本文实例为大家分享了C#导出Excel的具体代码,供大家参考,具体内容如下 using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Windows.Forms; using System.Reflection; namespace DMS { /// <summary> /// C#操作Excel类 /// </summary> class

c#将Excel数据导入到数据库的实现代码

假如Excel中的数据如下: 数据库建表如下: 其中Id为自增字段: 代码: 复制代码 代码如下: using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Data;using System.Data.OleDb;using System.Configuratio

C#将html table 导出成excel实例

复制代码 代码如下: public void ProcessRequest (HttpContext context) { string elxStr = "<table><tbody><tr><td>1</td><td>11</td></tr><tr><td>2</td><td>22</td></tr></tbody>

ASP.NET(C#)读取Excel的文件内容

.xls格式       Office2003及以下版本 .xlsx格式 Office2007 及以上版本 .csv格式       以逗号分隔的字符串文本(可以将上述两种文件类型另存为此格式) 读取前两种格式和读取后一种格式会用两种不同的方法. 下面看程序:页面前台: 复制代码 代码如下: <div>       <%-- 文件上传控件  用于将要读取的文件上传 并通过此控件获取文件的信息--%>      <asp:FileUpload ID="fileSele

c#利用Excel直接读取数据到DataGridView

在winform里拖入一个datagridview控件,跟一个openfiledialog控件 复制代码 代码如下: using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using Microsoft.Office.Core;using Excel=Mi

C#实现将DataTable内容输出到Excel表格的方法

本文实例讲述了C#实现将DataTable内容输出到Excel表格的方法.分享给大家供大家参考.具体如下: 1.关于本文 本文描述了一个函数(SaveToExcel),该函数可以将DataTable数据内的数据输出到Excel表格中 2.相关说明 1)本文中使用这个函数将一个DataTable中的内容输出到路径名为addr的目录下: 复制代码 代码如下: public void SaveToExcel(string addr, System.Data.DataTable dt) 2)这个函数需要

C#使用oledb操作excel文件的方法

本文实例讲述了C#使用oledb操作excel文件的方法.分享给大家供大家参考.具体分析如下: 不管什么编程语言都会提供操作Excel文件的方式,C#操作Excel主要有以下几种方式: 1.Excel 说明:利用Office 的Excel组件来操作excel文件 优点:能够完全操作Excel文件,生成丰富文件内容 缺点:需要电脑安装Excel,会启动Excel进程这在web上很不方便 2.OpenXML 说明:一个操作字处理文档的组件包括Excel 优点:能够操作操作Excel2007版本文件

利用java操作Excel文件的方法

很久以来都想研究一下利用java操作Excel的方法,今天没事,就稍微了解了一下,特总结一下.利用java操作Excel,有个开源的东东-jxl.jar,可以到http://sourceforge.net/projects/jexcelapi/files/下载. 一.读取Excel文件内容 复制代码 代码如下: /** *//**读取Excel文件的内容     * @param file  待读取的文件     * @return     */    public static String

php 操作excel文件的方法小结

一.php,不用COM,生成excel文件 复制代码 代码如下: <? header("Content-type:application/vnd.ms-excel"); header("Content-Disposition:filename=test.xls"); echo "test1\t"; echo "test2\t\n"; echo "test1\t"; echo "test2\t

C#基于OLEDB获取Excel文件表结构信息的方法

本文实例讲述了C#基于OLEDB获取Excel文件表结构信息的方法.分享给大家供大家参考,具体如下: 这个问题来自论坛提问,同理可以获得access等数据库的表结构信息. using System; namespace ConsoleApplication11 { class Program { public static void Main() { getExcelFileInfo( @" c:a.xls " ); } private static void getExcelFile

OLEDB打开Excel文件的实现方法

话不多说,上代码! class clsoledb { OleDbConnection connection; public void OpenConnection(string xlsFils) { if (!File.Exists(xlsFils)) { MessageBox.Show("文件" + xlsFils + "不存在", "提示"); return; } string conn = "Provider = Microsof

C#.net编程创建Access文件和Excel文件的方法详解

本文实例讲述了C#.net编程创建Access文件和Excel文件的方法.分享给大家供大家参考,具体如下: 一些系统可能需求把数据导出到Access或者Excel文件格式,以方便的传递数据.打印等. Excel 文件或者 Access这两种需要导出的文件可能并不是事先就存在的,这就需要我们自己编程生成他们,下面整理一下生成这两个文件的一些方法,只罗列最常用的.并不全. 一.首先生成Excel文件. 方案一.如果用Excel保存的只是二维数据,也就是把他当数据库的来用. 最简单,你不用引用任何额外

使用Python操作excel文件的实例代码

使用的类库 pip install openpyxl 操作实现 •工作簿操作 # coding: utf-8 from openpyxl import Workbook # 创建一个excel工作簿 wb = Workbook() # 打开一个工作簿 wb = load_workbook('test.xlsx') # 保存工作簿到文件 wb.save('save.xlsx') •工作表操作 # 获得当前的工作表对象 ws = wb.active # 通过工作表名称得到工作表对象 ws = wb.

Python实现抓取网页生成Excel文件的方法示例

本文实例讲述了Python实现抓取网页生成Excel文件的方法.分享给大家供大家参考,具体如下: Python抓网页,主要用到了PyQuery,这个跟jQuery用法一样,超级给力 示例代码如下: #-*- encoding:utf-8 -*- import sys import locale import string import traceback import datetime import urllib2 from pyquery import PyQuery as pq # 确定运行

java使用POI操作excel文件

一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Excel 95及以后的版本,即可操作后缀为 .xls 和 .xlsx两种格式的excel. POI全称 Poor Obfuscation Implementation,直译为"可怜的模糊实现",利用POI接口可以通过JAVA操作Microsoft office 套件工具的读写功能.官网:htt

C#导出数据到Excel文件的方法

本文实例讲述了C#导出数据到Excel文件的方法.分享给大家供大家参考.具体实现方法如下: /// <summary> /// 导出到Excel类,项目需引用Microsodt.Office.Interop.Excel, /// 类文件需using System.Data与System.Windows.Forms命名空间 /// </summary> public class CToExcel { /// <summary> /// 导出到Excel /// </