zoukankan      html  css  js  c++  java
  • C#使用NPOI库操作Excel文件

    NPOI支持的文件格式处理xls、xlsx外,还包括doc、ppt、vsd等,本文介绍NPOI对Excel的基本操作。

    xcel工作簿、工作表、xls、xlsx概念

    Excel中工作簿、工作表、xls、xlsx的概念如下:

    1. 每一个Excel文件都可以看做是一个工作簿,当打开一个Excel文件时,就等于打开了一个Excel工作簿。

    2. 当打开了excel工作簿后在窗口底部看到的“Sheet”标签标示的是工作表,有几个标签就表示有几个工作表。

        简单做一个类比,一个Excel文件即一个工作簿可以看做一本书,一个工作表即一个Sheet页面是书内的一页,可以     有很多页。Excel2003最多可以添加255个,Excel2007随意加。

    3. xls是Office 2003以及之前版本Excel的扩展名,xlsx是Office 2007及之后版本Excel所用的扩展名。xlsx用新的基于     XML的压缩文件格式取代了之前的默认文件格式,在传统的文件名后面添加了字面x(即.docx取代.doc、.xlsx取         代.xls,等等),使其占用的空间更小。xlsx向下兼容xls。

    1.首先添加NPOI类库的引用(也可手动添加引用):

    2.在项目中添加引用:

    using NPOI.SS.UserModel;
    using NPOI.HSSF.UserModel;
    using NPOI.XSSF.UserModel;
    using System.IO;

    首先介绍如何新建Excel工作表:

    HSSF使用于2007之前的xls版本,XSSF适用于2007及其之后的xlsx版本。

    以下程序新建了一个Excel 2003 xls和一个2007 xlsx文件,每个Excel文件初始包含了2个工作表。

    //------创建2003工作表
    HSSFWorkbook workbook2003 = new HSSFWorkbook(); //新建xls工作簿
    workbook2003.CreateSheet("Sheet1"); //新建3个Sheet工作表
    workbook2003.CreateSheet("Sheet2");
    workbook2003.CreateSheet("Sheet3");
    FileStream file2003 = new FileStream(@"E:Excel2003.xls", FileMode.Create);
    workbook2003.Write(file2003);
    file2003.Close(); //关闭文件流
    workbook2003.Close();
    //--------创建2007工作表
    Console.WriteLine("开始创建工作簿");
    XSSFWorkbook workbook2007 = new XSSFWorkbook(); //新建xlsx工作簿
    workbook2007.CreateSheet("Sheet1");
    workbook2007.CreateSheet("Sheet2");
    workbook2007.CreateSheet("Sheet3");
    FileStream file2007 = new FileStream(@"E:Excel2007.xlsx", FileMode.Create);
    workbook2007.Write(file2007);
    file2007.Close();
    workbook2007.Close();
    Console.ReadKey();

    以下介绍如何导出到Excel和导入到数据库:

    /// <summary>
    /// 写入Excel工作簿
    /// </summary>

    public static void inexcel()
    {
    Console.WriteLine("创建excel2003");
    HSSFWorkbook workbook2003 = new HSSFWorkbook();//新建工作簿
    Console.WriteLine("创建excel2003一个工作表");
    workbook2003.CreateSheet("Sheet1"); //新建1个Sheet工作表
    HSSFSheet SheetOne = (HSSFSheet)workbook2003.GetSheet("Sheet1"); //获取名称为Sheet1的工作表
    //对工作表先添加行,下标从0开始
    for (int i = 0; i <=Gettable().Rows.Count; i++)
    {
    //对每一行创建10个单元格
    SheetOne.CreateRow(i); //创建10行
    HSSFRow SheetRow = (HSSFRow)SheetOne.GetRow(i); //获取Sheet1工作表的首行
    HSSFCell[] SheetCell = new HSSFCell[Gettable().Columns.Count];
    for (int j = 0; j < Gettable().Columns.Count; j++)
    {
    SheetCell[j] = (HSSFCell)SheetRow.CreateCell(j);
    if (i == 0)
    {
    SheetCell[j].SetCellValue(Gettable().Columns[j].ToString());
    }
    else
    {
    SheetCell[j].SetCellValue(Gettable().Rows[i-1][j].ToString());

    }
    }
    }
    FileStream file2003 = new FileStream(@"E:Excel2003.xls", FileMode.Create);
    workbook2003.Write(file2003);
    file2003.Close();
    workbook2003.Close();
    Console.ReadLine();

    }
    /// <summary>
    /// 获取数据库数据到DataTable
    /// </summary>
    /// <returns></returns>
    public static DataTable Gettable()
    {
    string con = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
    using (SqlConnection conn = new SqlConnection(con))
    {
    SqlDataAdapter adaperter = new SqlDataAdapter("select * from Users", conn);
    DataTable dataTable = new DataTable();
    adaperter.Fill(dataTable);
    return dataTable;
    }

    }
    /// <summary>
    /// Excel导入到数据库
    /// </summary>
    public static void Insert()
    {

    using (FileStream fileReader = File.OpenRead(@"E:\Excel2011.xls"))
    {
    //创建工作簿对象接收文件流(Excel信息)
    IWorkbook workbook = new HSSFWorkbook(fileReader);
    //工作簿共有几个表
    //int count = workbook.NumberOfSheets;
    //创建工作表读取工作簿表信息
    //ISheet sheet= workbook.GetSheet("表名称");
    ISheet sheet = workbook.GetSheetAt(0);
    string sql = @" insert into Users1(UserId, UserName, UserPass, LogDayCount) values (@UserId, @UserName,@UserPass,@LogDayCount)";
    int ii = 0;
    //r = 1,剔除表头一行
    for (int r = 1; r <=sheet.LastRowNum; r++)
    {
    //定义参数数组para
    SqlParameter[] para = new SqlParameter[] {
    new SqlParameter("UserId",SqlDbType.Int,32),
    new SqlParameter("UserName",SqlDbType.NVarChar,200),
    new SqlParameter("UserPass",SqlDbType.NVarChar,300),
    new SqlParameter("LogDayCount",SqlDbType.Int,32),
    };
    //创建一行获取sheet行数据
    // IRow row1 = sheet.GetRow(0);
    IRow row = sheet.GetRow(r);
    List<ICell> listcell = new List<ICell>();
    //int c = 1 即不读取自动编号的Id列
    for (int c = 0; c < row.LastCellNum; c++)
    {
    //将每行每个单元格的值添加带listcell集合中
    listcell.Add(row.GetCell(c));
    }
    //循环赋值给para
    for (int i = 0; i <listcell.Count; i++)
    {
    para[i].Value = listcell[i].ToString();
    }
    //执行添加Sql语句
    string sqlcon = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
    ii += SqlHelper.ExecuteNonQuery(sqlcon, CommandType.Text, sql, para);
    }
    if (ii > 0)
    {
    Console.WriteLine("已将Excel数据插入到数据库表");
    Console.ReadKey();
    }
    else
    {
    Console.WriteLine("Excel数据插入到数据库表失败");
    Console.ReadKey();
    }

    }
    }

     

     

  • 相关阅读:
    Regional Changchun Online--Elven Postman(裸排序二叉树)
    动态规划01背包记录
    hdoj 2546 饭卡
    hdoj 2553 N皇后问题【回溯+打表】
    nyoj 282 You are my brother
    hdoj 1231 最大连续子序列
    hdoj 1003 Max Sum
    2015年6月24
    poj 1338 Ugly Numbers
    poj 3979 分数加减法
  • 原文地址:https://www.cnblogs.com/zpyplan/p/9585961.html
Copyright © 2011-2022 走看看