导出Excel(一)
来源:互联网 发布:知乎 arpg 编辑:程序博客网 时间:2024/04/27 16:34
快速导出Excel其实比较简单,主要是给Excel.Range的Value2属性赋值。该属性的值是一个对象类型的二维数组。第一秩表示的是行,第二秩表示的是列。
本方法是基于已经存在Excel模板的情况下使用的,可以对方法进行一些扩展或者修改。比如不基于模板的导出,只需修改appExcel.Workbooks.Open处为appExcel.Workbooks.Add即可;
方法中MaxRow表示每次导出到Excel的Sheet的最大行数。一般情况下,一个sheet可以容纳的最大行数为65536行,所以MaxRow应该小于该值。由于方法中导出是一次导出一定数量的数据(iEachSize来确定),所以MaxRow的值应该是65536减去iEachSize。
该方法可以直接使用,我会在适当的地方加以注释。
/// <summary>
/// DataTable 导出Excel
/// </summary>
/// <param name="strFileName">保存的文件名称</param>
/// <param name="dt">要导出的数据</param>
/// <param name="strTempFileName">模版名称</param>
/// <returns>true:成功 false:失败</returns>
public static bool ExportExcel(string strFileName, DataTable dt, string strTempFileName)
{
if (dt == null || dt.Rows.Count == 0)
return false;
Excel.Application appExcel = new Excel.Application();
Excel.Workbook workbookData;
Excel.Worksheet worksheetData;
System.Globalization.CultureInfo CurrentCI = System.Threading.Thread.CurrentThread.CurrentCulture;
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
workbookData = appExcel.Workbooks.Open(strTempFileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
worksheetData = (Excel.Worksheet)workbookData.Sheets[1];
//DataTable的ColumnName作为Excel的列名
for (int i = 0; i < dt.Columns.Count; i++)
{
worksheetData.Cells[1, i + 1] = dt.Columns[i].ColumnName.Trim();
}
Excel.Range xlRang = null;
int iRowCount = dt.Rows.Count;//导出的数据总数量
int iParstedRow = 0;//已经到处的数据总数量
int iCurrSize = 0;//每次实际导出的数量,大多数情况下和iEachSize相同,最后一批可能不同
int iEachSize = 1000; // 设定的每次导出的数量
int iColumnAccount = dt.Columns.Count;
int iCurrentRow = 0;//当前已经导出的数量,如果大于MaxRow,则新增一个Sheet再导出
int iSheet = 1;//当前的sheet
object[,] objVal = new object[iEachSize, iColumnAccount];
try
{
iCurrSize = iEachSize;
while (iParstedRow < iRowCount)
{
if ((iRowCount - iParstedRow) < iEachSize)
iCurrSize = iRowCount - iParstedRow;
for (int i = 0; i < iCurrSize; i++)
{
for (int j = 0; j < iColumnAccount; j++)
objVal[i, j] = dt.Rows[iParstedRow + i][j].ToString();
}
// 比如 A1 H10, 表示从 A 到 H 列, 1 到 10 行
xlRang = worksheetData.get_Range("A" + ((int)(iCurrentRow + 1)).ToString(), ((char)('A' + iColumnAccount - 1)).ToString()
+ (((int)(iCurrentRow + iCurrSize + 1)).ToString()));
xlRang.Value2 = objVal;
iParstedRow = iParstedRow + iCurrSize;
iCurrentRow = iCurrentRow + iCurrSize;
if (iCurrentRow > MaxRow)
{
worksheetData = (Excel.Worksheet)workbookData.Worksheets.Add(Missing.Value, workbookData.Worksheets.get_Item(iSheet), Missing.Value, Missing.Value);
iSheet += 1;
for (int i = 0; i < dt.Columns.Count; i++)
{
worksheetData.Cells[1, i + 1] = dt.Columns[i].ColumnName.Trim();
}
iCurrentRow = 0;
}
}
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRang);
xlRang = null;
}
catch
{
appExcel.Quit();
return false;
}
System.Threading.Thread.CurrentThread.CurrentCulture = CurrentCI;
workbookData.Saved = false;
workbookData.SaveAs(strFileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
appExcel.Quit();
return true;
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lsj_zrp/archive/2009/07/29/4390944.aspx
- 导出Excel(一)
- 导出Excel(一)
- Excel导出(一)
- 导出excel(一)
- POI导出Excel(一)
- 导出到excel的类(一)
- poi ,Struts2 导出Excel运用(一)
- Asp.net导出Excel(一)
- Asp.net导出Excel(一)
- Excel导入导出JXL、POI(一)
- 通用excel数据导出/转换(一)
- java 导出Excel 大数据量(一)
- C# Excel导入导出(一)
- list集合导出Excel文件(一)
- asp导出excel一
- 一键导出excel
- POI一键导出Excel
- Java 导出Excel方法一
- Recordset.State 属性
- 使用cdrecord命令刻录光盘
- Window Classes
- textbox禁止输入空格
- 子类调用父类构造方法问题
- 导出Excel(一)
- 完全干掉Oracle死锁进程
- 2010年1月17日--------2010年1月24日 出差体会
- ubuntu Oracle11g EM乱码解决方法
- 项目绑定
- 快乐是什么
- 教你在局域网上把自己隐藏起来
- (地道常用英语)不要忘记嘴边的话
- JS_小工具_文本内容处理