当前位置:软件学习 > Excel >>

C#中npoi操作Excel[版本2.0.1读写2003、2007格式]

  public static void test1()
       {
           NpoiHelper np = new NpoiHelper();
           DataTable dt1 = np.ReadExcel(AppDomain.CurrentDomain.BaseDirectory + "1测试数据.xls", 2).Tables[0];//读2003格式数据
           DataSet ds1 = new DataSet();
           ds1.Tables.Add(dt1.Copy());
           ds1.AcceptChanges();
           string SaveFileName = "output1.xls";
           np.CreateExcel2003(SaveFileName, "sheet001", ds1, 0);//写2003格式数据
       }
       public static void test2()
       {
           NpoiHelper np = new NpoiHelper();
           DataTable dt1 = np.ReadExcel(AppDomain.CurrentDomain.BaseDirectory + "2测试数据.xlsx", 2).Tables[0];//读2007格式数据
           DataSet ds1 = new DataSet();
           ds1.Tables.Add(dt1.Copy());
           ds1.AcceptChanges();

           string SaveFileName = "output2.xlsx";
           np.CreateExcel2007(SaveFileName, "sheet001", ds1, 0);//写2007格式数据
           Console.ReadKey();
       }

 

 

 


using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using NPOI.HSSF.UserModel;
using System.Data;
using System.Collections;
using System.Drawing;
using NPOI.HSSF.Util;
using NPOI.SS.UserModel;
using NPOI.HPSF;
using NPOI.XSSF.UserModel;

namespace Tools.Common
{
   /// <summary>
   /// Excel文件到DataSet的转换类
   /// </summary>
   public class NpoiHelper
   {
       #region 读取Excel文件内容转换为DataSet
       /// <summary>
       /// 读取Excel文件内容转换为DataSet,列名依次为 "c0"……c[columnlength-1]
       /// </summary>
       /// <param name="FileName">文件绝对路径</param>
       /// <param name="startRow">数据开始行数(1为第一行)</param>
       /// <param name="ColumnDataType">每列的数据类型</param>
       /// <returns></returns>
       public DataSet ReadExcel(string FileName, int startRow, params NpoiDataType[] ColumnDataType)
       {
           int ertime = 0;
           int intime = 0;
           DataSet ds = new DataSet("ds");
           DataTable dt = new DataTable("dt");
           DataRow dr;
           StringBuilder sb = new StringBuilder();
           using (FileStream stream = new FileStream(@FileName, FileMode.Open, FileAccess.Read))
           {
               IWorkbook workbook = WorkbookFactory.Create(stream);//使用接口,自动识别excel2003/2007格式
               ISheet sheet = workbook.GetSheetAt(0);//得到里面第一个sheet
               int j;
               IRow row;
               #region ColumnDataType赋值
               if (ColumnDataType.Length <= 0)
               {
                   row = sheet.GetRow(startRow - 1);//得到第i行
                   ColumnDataType = new NpoiDataType[row.LastCellNum];
                   for (int i = 0; i < row.LastCellNum; i++)
                   {
                       ICell hs = row.GetCell(i);
                       ColumnDataType[i] = GetCellDataType(hs);
                   }
               }
               #endregion
               for (j = 0; j < ColumnDataType.Length; j++)
               {
                   Type tp = GetDataTableType(ColumnDataType[j]);
                   dt.Columns.Add("c" + j, tp);
               }
               for (int i = startRow - 1; i <= sheet.PhysicalNumberOfRows; i++)
               {
                   row = sheet.GetRow(i);//得到第i行
                   if (row == null) continue;
                   try
                   {
  &n

补充:软件开发 , C# ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,