当前位置:  编程技术>.net/c#/asp.net

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

    来源: 互联网  发布时间:2014-10-15

    本文导语:  最近,由于公司项目中需要将系统内用户操作的所有日志进行转存备份,考虑到以后可能还需要还原,所以最后决定将日志数据备份到Excel中。 下面是我项目当中Excel.cs这个类的全部代码,通过这个类可以很容易地将DataTable中...

最近,由于公司项目中需要将系统内用户操作的所有日志进行转存备份,考虑到以后可能还需要还原,所以最后决定将日志数据备份到Excel中。

下面是我项目当中Excel.cs这个类的全部代码,通过这个类可以很容易地将DataTable中的数据导入到Excel方法中。

首先,必须要下载NPOI.dll这个程序集,
类代码如下:
代码如下:

using System;
using NPOI.HSSF;
using NPOI.HPSF;
using NPOI.HSSF.UserModel;
using NPOI.HSSF.Util;
using NPOI.SS.UserModel;
using System.Collections;
using System.IO;
using System.Data;
namespace BackupAttach
{
public class Excel
{
private HSSFWorkbook _workBook;
private ISheet _wbSheet = null;
private DataColumnCollection _columns = null;
private int _col = 0; //total columns
private int _row = 0; //total rows
private int _sheet = 0; //total sheets
private int _sheetRowNum = 65536; //each sheet allow rows
public Excel()
{
InstanceWorkBook();
}
///
/// 实例方法
///
/// 单个表单允许的最大行数
public Excel(int sheetRowNum)
{
_sheetRowNum = sheetRowNum;
InstanceWorkBook();
}
///
/// 实例方法
///
/// 表头
public Excel(DataColumnCollection columns)
{
_columns = columns;
InstanceWorkBook();
}
private void InstanceWorkBook()
{
/////cretate WorkBook
_workBook = new HSSFWorkbook();
var dsi = PropertySetFactory.CreateDocumentSummaryInformation();
dsi.Company = "BaiyiTimes";
_workBook.DocumentSummaryInformation = dsi;
////create a entry of SummaryInformation
var si = PropertySetFactory.CreateSummaryInformation();
si.Subject = "Etimes Secure Document System Log Backup";
_workBook.SummaryInformation = si;
}
private DataColumnCollection GetColumns(DataColumnCollection columns)
{
return columns == null || columns.Count == 0 ? _columns : columns;
}
private ISheet GetSheet(ISheet sheet)
{
return sheet == null ? _wbSheet : sheet;
}
private void CreateHeader(ISheet sheet, DataColumnCollection columns)
{
_columns = GetColumns(columns);
/////create row of column
var oRow = sheet.CreateRow(0);
foreach (DataColumn column in _columns)
{
var oCell = oRow.CreateCell(_col);
var style1 = _workBook.CreateCellStyle();
style1.FillForegroundColor = HSSFColor.BLUE.index2;
style1.FillPattern = FillPatternType.SOLID_FOREGROUND;
style1.Alignment = HorizontalAlignment.CENTER;
style1.VerticalAlignment = VerticalAlignment.CENTER;
var font = _workBook.CreateFont();
font.Color = HSSFColor.WHITE.index;
style1.SetFont(font);
oCell.CellStyle = style1;
var name = column.ColumnName;
oCell.SetCellValue(name.ToString());
_col++;
}
///// header belong to rows
_row++;
}
private void CreateHeader(ISheet sheet)
{
CreateHeader(sheet, null);
}
public ISheet CreateSheet()
{
return CreateSheet(null);
}
public ISheet CreateSheet(DataColumnCollection columns)
{
_wbSheet = _workBook.CreateSheet((_sheet + 1).ToString());
CreateHeader(_wbSheet, columns);
_sheet++;
return _wbSheet;
}
public void SetRowValue(DataRowCollection rows, ISheet sheet)
{
_wbSheet = GetSheet(sheet);
foreach (DataRow row in rows)
{
SetRowValue(row);
}
}
public void SetRowValue(DataRowCollection rows)
{
SetRowValue(rows, null);
}
public void SetRowValue(DataRow row)
{
// create a new sheet
if (_row % _sheetRowNum == 0)
{
CreateSheet();
}
var oRow = _wbSheet.CreateRow(_row % _sheetRowNum);
var obj = string.Empty;
var cell = 0;
foreach (DataColumn column in _columns)
{
obj = row[column.ColumnName].ToString();
oRow.CreateCell(cell).SetCellValue(obj);
cell++;
}
_row++;
}
public void SetProtectPassword(string password, string username)
{
_workBook.WriteProtectWorkbook(password, username);
}
public void SaveAs(string filePath)
{
if (File.Exists(filePath)) File.Delete(filePath);
var file = new FileStream(filePath, FileMode.Create);
_workBook.Write(file);
file.Close();
}
}
}

下面给出小Demo共参考:
代码如下:

public void DataTableToExcel(DataTable dt,string path)
{
//instance excel object
//Excel excel = new Excel(65536);
Excel excel = new Excel();
//create a sheet
excel.CreateSheet(dt.Columns);
//write value into rows
//excel.SetRowValue(dt.Rows);
foreach (DataRow row in dt.Rows)
{
excel.SetRowValue(row);
}
// set excel protected
excel.SetProtectPassword("etimes2011@", "baiyi");
// save excel file to local
excel.SaveAs(path);
}

缺点:如果要导入到Excel中的数据量较多时(几十万或者几百万行),全部一次性放到DataTable中可能会对内存消耗很大,建议每次导入的数据最好不要超过1000条,可采取分页查询的方式将数据导入Excel中。

优点:1997-2003版本的xls中每个表单最大只支持65536行,2010可以支持1048576行,考虑到客户机上安装的版本不一样,故Excel对象每个表单最大支持65536行,当表单到达最大行数时,Excel对象内部会自动创建新表单,在往Excel中写数据的时候不用考虑这一点,这样调用的时候更为方便

    
 
 

您可能感兴趣的文章:

  • C#实现Datatable排序的方法
  • c# dataTable 合并两个列到一个新列中的简单实例
  • c#将list类型转换成DataTable方法示例
  • C# datatable 不能通过已删除的行访问该行的信息处理方法
  • asp.net(c#版)添加DataRow数据列到DataTable控件
  • C# DataTable 转换为 实体类对象实例
  • c#的datatable转list示例
  • C#中DataTable删除行的方法分析
  • c#中合并DataTable重复行的值
  • c#数据绑定之删除datatable数据示例
  • C#中datatable序列化与反序列化实例分析
  • C#获取变更过的DataTable记录的实现方法
  • C#操作EXCEL DataTable转换的实例代码
  • C#对DataTable里数据排序的方法
  • c# 如何将RadioButton与DataTable数据进行绑定
  • C#中csv文件与DataTable互相导入处理实例解析
  • c# DataTable与不同结构实体类转换的方法实例
  • C#中DataTable排序、检索、合并等操作实例
  • C#使用DataSet Datatable更新数据库的三种实现方法
  • c# 委托反射 DataTable转换为实体集的方法
  • Asp.net中DataTable导出到Excel的实现代码
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Delete与Remove删除Datatable行的区别
  • DataSet与DataTable的区别示例介绍
  • datatable去掉重复行的方法
  • jquery转化Datatable为json数据的例子
  • DataSet、DataTable、DataRow区别详解
  • datatable行转列示例分享
  • 比较2个datatable内容是否相同的方法
  • npoi2.0将datatable对象转换为excel2007示例
  • sqlserver合并DataTable并排除重复数据的通用方法分享
  • asp.net实例代码之添加DataColumn到DataTable控件中
  • c#.net 读取Excel数据到DataTable中的代码
  • 将DataTable转换成List<T>实现思路及示例代码
  • c#使用委托反射将DataTable转换为实体集的代码
  • c#中利用委托反射将DataTable转换为实体集的代码
  • jquery datatable后台封装数据示例代码
  • .Net读取Excel 返回DataTable实例代码
  • C#中的DataSet、string、DataTable、对象转换成Json的实现代码
  • SqlServer参数化查询之where in和like实现之xml和DataTable传参介绍
  • C#中把Datatable转换为Json的5个代码实例
  • viewstate和datatable动态录入数据示例


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3