zoukankan      html  css  js  c++  java
  • ASP.NET使用NPOI类库导出Excel

    /*
     * 作者: 牛腩
     * 创建时间: 2010-1-4 15:15:05
     * Email: 164423073@qq.com
     * 说明: 导出EXCEL的类,使用说明见:
    http://msdn.microsoft.com/zh-tw/ee818993.aspx
     
    */

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.IO;
    using System.Linq;
    using System.Web;
    using NPOI;
    using NPOI.HPSF;
    using NPOI.HSSF;
    using NPOI.HSSF.UserModel;
    using NPOI.POIFS;
    using NPOI.Util;

    public class DataTableRenderToExcel
    {
        
    public static Stream RenderDataTableToExcel(DataTable SourceTable)
        {
            HSSFWorkbook workbook 
    = new HSSFWorkbook();
            MemoryStream ms 
    = new MemoryStream();
            HSSFSheet sheet 
    = workbook.CreateSheet();
            HSSFRow headerRow 
    = sheet.CreateRow(0);

            
    // handling header.
            foreach (DataColumn column in SourceTable.Columns)
                headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);

            
    // handling value.
            int rowIndex = 1;

            
    foreach (DataRow row in SourceTable.Rows)
            {
                HSSFRow dataRow 
    = sheet.CreateRow(rowIndex);

                
    foreach (DataColumn column in SourceTable.Columns)
                {
                    dataRow.CreateCell(column.Ordinal).SetCellValue(row[column].ToString());
                }

                rowIndex
    ++;
            }

            workbook.Write(ms);
            ms.Flush();
            ms.Position 
    = 0;

            sheet 
    = null;
            headerRow 
    = null;
            workbook 
    = null;

            
    return ms;
        }

        
    public static void RenderDataTableToExcel(DataTable SourceTable, string FileName)
        {
            MemoryStream ms 
    = RenderDataTableToExcel(SourceTable) as MemoryStream;
            FileStream fs 
    = new FileStream(FileName, FileMode.Create, FileAccess.Write);
            
    byte[] data = ms.ToArray();

            fs.Write(data, 
    0, data.Length);
            fs.Flush();
            fs.Close();

            data 
    = null;
            ms 
    = null;
            fs 
    = null;
        }

        
    public static DataTable RenderDataTableFromExcel(Stream ExcelFileStream, string SheetName, int HeaderRowIndex)
        {
            HSSFWorkbook workbook 
    = new HSSFWorkbook(ExcelFileStream);
            HSSFSheet sheet 
    = workbook.GetSheet(SheetName);

            DataTable table 
    = new DataTable();

            HSSFRow headerRow 
    = sheet.GetRow(HeaderRowIndex);
            
    int cellCount = headerRow.LastCellNum;

            
    for (int i = headerRow.FirstCellNum; i < cellCount; i++)
            {
                DataColumn column 
    = new DataColumn(headerRow.GetCell(i).StringCellValue);
                table.Columns.Add(column);
            }

            
    int rowCount = sheet.LastRowNum;

            
    for (int i = (sheet.FirstRowNum + 1); i < sheet.LastRowNum; i++)
            {
                HSSFRow row 
    = sheet.GetRow(i);
                DataRow dataRow 
    = table.NewRow();

                
    for (int j = row.FirstCellNum; j < cellCount; j++)
                    dataRow[j] 
    = row.GetCell(j).ToString();
            }

            ExcelFileStream.Close();
            workbook 
    = null;
            sheet 
    = null;
            
    return table;
        }

        
    public static DataTable RenderDataTableFromExcel(Stream ExcelFileStream, int SheetIndex, int HeaderRowIndex)
        {
            HSSFWorkbook workbook 
    = new HSSFWorkbook(ExcelFileStream);
            HSSFSheet sheet 
    = workbook.GetSheetAt(SheetIndex);

            DataTable table 
    = new DataTable();

            HSSFRow headerRow 
    = sheet.GetRow(HeaderRowIndex);
            
    int cellCount = headerRow.LastCellNum;

            
    for (int i = headerRow.FirstCellNum; i < cellCount; i++)
            {
                DataColumn column 
    = new DataColumn(headerRow.GetCell(i).StringCellValue);
                table.Columns.Add(column);
            }

            
    int rowCount = sheet.LastRowNum;

            
    for (int i = (sheet.FirstRowNum + 1); i < sheet.LastRowNum; i++)
            {
                HSSFRow row 
    = sheet.GetRow(i);
                DataRow dataRow 
    = table.NewRow();

                
    for (int j = row.FirstCellNum; j < cellCount; j++)
                {
                    
    if (row.GetCell(j) != null)
                        dataRow[j] 
    = row.GetCell(j).ToString();
                }

                table.Rows.Add(dataRow);
            }

            ExcelFileStream.Close();
            workbook 
    = null;
            sheet 
    = null;
            
    return table;
        }

        
    /// <summary>读取excel
        
    /// 默认第一行为标头
        
    /// </summary>
        
    /// <param name="path">excel文档路径</param>
        
    /// <returns></returns>
        public static DataTable RenderDataTableFromExcel(string path) {
            DataTable dt 
    = new DataTable();

            HSSFWorkbook hssfworkbook;
            
    using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read))
            {
                hssfworkbook 
    = new HSSFWorkbook(file);
            }
            HSSFSheet sheet 
    = hssfworkbook.GetSheetAt(0);
            System.Collections.IEnumerator rows 
    = sheet.GetRowEnumerator();

            HSSFRow headerRow 
    = sheet.GetRow(0);
            
    int cellCount = headerRow.LastCellNum;

            
    for (int j = 0; j < cellCount; j++)
            {
                HSSFCell cell 
    = headerRow.GetCell(j);
                dt.Columns.Add(cell.ToString());
            }

            
    for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
            {
                HSSFRow row 
    = sheet.GetRow(i);
                DataRow dataRow 
    = dt.NewRow();

                
    for (int j = row.FirstCellNum; j < cellCount; j++)
                {
                    
    if (row.GetCell(j) != null)
                        dataRow[j] 
    = row.GetCell(j).ToString();
                }

                dt.Rows.Add(dataRow);
            }

            
    //while (rows.MoveNext())
            
    //{
            
    //    HSSFRow row = (HSSFRow)rows.Current;
            
    //    DataRow dr = dt.NewRow();

            
    //    for (int i = 0; i < row.LastCellNum; i++)
            
    //    {
            
    //        HSSFCell cell = row.GetCell(i);


            
    //        if (cell == null)
            
    //        {
            
    //            dr[i] = null;
            
    //        }
            
    //        else
            
    //        {
            
    //            dr[i] = cell.ToString();
            
    //        }
            
    //    }
            
    //    dt.Rows.Add(dr);
            
    //}

            
    return dt;
        }
    }
    撸码:复制、粘贴,拿起键盘就是“干”!!!
  • 相关阅读:
    html 选择本地图片,显示选择的图片
    cocos Uniforms值的赋值
    unity:坐标变换
    Mercurial 的hook使用
    mercurial branch name use integer as a name
    nginx php-fpm 配置问题(2)
    nginx php-fpm 配置问题(1)
    用defy来潜水最终还是挂了........
    excel用vlookup,lookup时查询数据需要排序
    ubuntu1204上不能正常用emacs配合gocode进行自动补全
  • 原文地址:https://www.cnblogs.com/niunan/p/1700706.html
Copyright © 2011-2022 走看看