Net操作Excel(究極の方法NPOI)

9618 ワード

前言


Asp.Net/C#がExcelを操作するのはすでに古い成長談の事で、しかし以下私が言ったこのNPOIがExcelを操作するのは、最も良い方案であるべきで、1つもなくて、NPOIを使って開発者がマイクロソフトOfficeをインストールしていない情況の下でOffice 97-2003のファイルを読み書きすることを助けることができて、支持する文書のフォーマットはxls、doc、pptなどを含みます.NPOIはPOI 3に構築する.xバージョン以上では、OfficeをインストールせずにWord/Excelドキュメントを読み書きできます.

方法


まず公式サイトに行きます.http://npoi.codeplex.com/ダウンロードにはdll(.net 2.0または.net 4.0のdllを選択可能)を導入し、Webサイトに参照を追加する必要があります.
Asp.Netエクスポートコード:
NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
NPOI.SS.UserModel.ISheet sheet = book.CreateSheet("test_01");

//    
NPOI.SS.UserModel.IRow row = sheet.CreateRow(0);
row.CreateCell(0).SetCellValue("      ");

//    
NPOI.SS.UserModel.IRow row2 = sheet.CreateRow(1);
row2.CreateCell(0).SetCellValue("      ");

// ...

//         
System.IO.MemoryStream ms = new System.IO.MemoryStream();
book.Write(ms);
Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls", DateTime.Now.ToString("yyyyMMddHHmmssfff")));
Response.BinaryWrite(ms.ToArray());
book = null;
ms.Close();
ms.Dispose();

 
Asp.Netインポートコード:
HSSFWorkbook hssfworkbook;  
#region  
public DataTable ImportExcelFile(string filePath)  
{  
    #region//       
    try  
    {  
        using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))  
        {  
            hssfworkbook = new HSSFWorkbook(file);  
        }  
    }  
    catch (Exception e)  
    {  
        throw e;  
    }  
    #endregion  
  
    NPOI.SS.UserModel.Sheet sheet = hssfworkbook.GetSheetAt(0);  
    System.Collections.IEnumerator rows = sheet.GetRowEnumerator();  
    DataTable dt = new DataTable();  
    for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++)  
    {  
        dt.Columns.Add(Convert.ToChar(((int)'A') + j).ToString());  
    }  
    while (rows.MoveNext())  
    {  
        HSSFRow row = (HSSFRow)rows.Current;  
        DataRow dr = dt.NewRow();  
        for (int i = 0; i < row.LastCellNum; i++)  
        {  
            NPOI.SS.UserModel.Cell cell = row.GetCell(i);  
            if (cell == null)  
            {  
                dr[i] = null;  
            }  
            else  
            {  
                dr[i] = cell.ToString();  
            }  
        }  
        dt.Rows.Add(dr);  
    }  
    return dt;  
}  
#endregion  

 
C#Excelのエクスポート:
public static void WriteExcel(DataTable dt, string filePath)
{
    if (!string.IsNullOrEmpty(filePath) && null != dt && dt.Rows.Count > 0)
    {
        NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
        NPOI.SS.UserModel.ISheet sheet = book.CreateSheet(dt.TableName);

        NPOI.SS.UserModel.IRow row = sheet.CreateRow(0);
        for (int i = 0; i < dt.Columns.Count; i++)
        {
            row.CreateCell(i).SetCellValue(dt.Columns[i].ColumnName);
        }
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            NPOI.SS.UserModel.IRow row2 = sheet.CreateRow(i + 1);
            for (int j = 0; j < dt.Columns.Count; j++)
            {
                row2.CreateCell(j).SetCellValue(Convert.ToString(dt.Rows[i][j]));
            }
        }
        //         
        using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
        {
            book.Write(ms);
            using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
            {
                byte[] data = ms.ToArray();
                fs.Write(data, 0, data.Length);
                fs.Flush();
            }
            book = null;
        }
    }
}

 
 

結論


これで簡単にExcelの操作を解決できます.試してみてください.使いやすいです.役に立つと思ったらお勧めしてください.ありがとうございます.