NPOI操作Excel 002:读取Excel

本文讲述如何通过NPOI来读取Excel。
需要准备的dll见:http://blog.csdn.net/yysyangyangyangshan/article/details/42614181
环境.net2.0,Excel版本2003。
NPOI读取Excel比较简单,只要抓住Excel的几个主要点即可。
一般Excel通过这几部分构成的,book,sheet页,然后是sheet页里的行列。读取Excel则是先找到book,然后book内的sheet,之后就根据sheet里的第几行第几列进行读取内容即可。
下面直接看代码。
先看一个主要用来读取Excel内容的方法。看懂这个方法后可以灵活的使用代码读取Excel的内容。
以下是将Excel表格的内容读取为一个DataTable。当然在实际中不一定需要读取为DataTable,也可以读某一行,某一列,或者某个单元格单独读取。

    /// <summary>
        /// 读取Excel保存为datatable
        /// </summary>
        /// <param name="filePath">Excel文件路径</param>
        /// <param name="startRow">第几行开始读取</param>
        /// <returns></returns>
        public static DataTable DoReadExcelDataTable(string filePath,int startRow)
        {
            DataTable dt = new DataTable();

            if (!File.Exists(filePath))
            {
                return dt;
            }

            HSSFWorkbook workbook = null;

            HSSFSheet sheet = null;

            FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);

            workbook = new HSSFWorkbook(fs);

            sheet = workbook.GetSheetAt(0);

            HSSFRow row1 = sheet.GetRow(startRow);

            int cellCount = row1.LastCellNum;

            //此处是读取列名的,如果不需要列名则注释此代码
            for (int i = row1.FirstCellNum; i < row1.LastCellNum; i++)
            {
                DataColumn columItem = new DataColumn(row1.GetCell(i).StringCellValue);
                dt.Columns.Add(columItem);
            }

            int rowCount = sheet.LastRowNum;

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

                DataRow dtrow = dt.NewRow();

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

                dt.Rows.Add(dtrow);
            }
            sheet = null;

            workbook = null;

            return dt;
        }

如上代码,读取Excel只需要按照BOOK-SHEET-ROW或者CELL即可取出你想要的内容。

下面通过一个例子来详细看一下如何读取的。
例如,将如下Excel内容读完全取出来,并显示在页面上。

这个代码如下:
读取Excel方法的类:

 public class NPOIHelper
    {
        /// <summary>
        /// 读取Excel保存为datatable
        /// </summary>
        /// <param name="filePath">Excel文件路径</param>
        /// <param name="startRow">第几行开始读取</param>
        /// <returns></returns>
        public static DataTable DoReadExcelDataTable(string filePath,int startRow)
        {
            DataTable dt = new DataTable();

            if (!File.Exists(filePath))
            {
                return dt;
            }

            HSSFWorkbook workbook = null;

            HSSFSheet sheet = null;

            FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);

            workbook = new HSSFWorkbook(fs);

            sheet = workbook.GetSheetAt(0);

            HSSFRow row1 = sheet.GetRow(startRow);

            int cellCount = row1.LastCellNum;

            //此处是读取列名的,如果不需要列名则注释此代码
            for (int i = row1.FirstCellNum; i < row1.LastCellNum; i++)
            {
                DataColumn columItem = new DataColumn(row1.GetCell(i).StringCellValue);
                dt.Columns.Add(columItem);
            }

            int rowCount = sheet.LastRowNum;

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

                DataRow dtrow = dt.NewRow();

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

                dt.Rows.Add(dtrow);
            }
            sheet = null;

            workbook = null;

            return dt;
        }
    }

后台代码:

   public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                InitialPage();
            }
        }

        private void InitialPage()
        {
            string excelFile = HttpRuntime.AppDomainAppPath.ToString();

            excelFile += @"\ExcelFile\TestNPOIRead.xls";

            DataTable dt = NPOIHelper.DoReadExcelDataTable(excelFile, 0);

            dgExcelDatas.DataSource = dt;

            dgExcelDatas.DataBind();
        }
    }

前台显示代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TestNOPIReadExcel._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <asp:GridView ID="dgExcelDatas" runat="server" EnableViewState="false" CellPadding="4"
       GridLines="Horizontal" PageChange="TextBox" AutoGenerateColumns="False" SortMode="Total" ForeColor="#333333"
       CellSpacing="1" Width="60%" ShowNoRecordTip="True">
     <Columns>

       <asp:TemplateField>
       <ItemTemplate>
         <span> <%#Eval("序号")%></span>
       </ItemTemplate>
       <HeaderTemplate>
       <span>序号</span>
       </HeaderTemplate>
       </asp:TemplateField>

       <asp:TemplateField>
       <ItemTemplate>
        <span> <%#Eval("姓名")%></span>
       </ItemTemplate>
       <HeaderTemplate>
       <span>姓名</span>
       </HeaderTemplate>
       </asp:TemplateField>

        <asp:TemplateField>
       <ItemTemplate>
        <span> <%#Eval("年龄")%></span>
       </ItemTemplate>
       <HeaderTemplate>
       <span>年龄</span>
       </HeaderTemplate>
       </asp:TemplateField>

       <asp:TemplateField>
       <ItemTemplate>
        <span> <%#Eval("部门")%></span>
       </ItemTemplate>
       <HeaderTemplate>
       <span>部门</span>
       </HeaderTemplate>
       </asp:TemplateField>

       <asp:TemplateField>
       <ItemTemplate>
        <span> <%#Eval("职位")%></span>
       </ItemTemplate>
       <HeaderTemplate>
       <span>职位</span>
       </HeaderTemplate>
       </asp:TemplateField>

       <asp:TemplateField>
       <ItemTemplate>
        <span> <%#Eval("年终奖(万)")%></span>
       </ItemTemplate>
       <HeaderTemplate>
       <span>年终奖(万)</span>
       </HeaderTemplate>
       </asp:TemplateField>

       <asp:TemplateField>
       <ItemTemplate>
        <span> <%#Eval("备注")%></span>
       </ItemTemplate>
       <HeaderTemplate>
       <span>备注</span>
       </HeaderTemplate>
       </asp:TemplateField>

     </Columns>
     <FooterStyle BackColor="#5D7B9D" Font-Bold="True" HorizontalAlign="Center" ForeColor="White" />
            <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
            <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
            <RowStyle HorizontalAlign="Center" />
            <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <EditRowStyle BackColor="#999999" />
            <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
    </asp:GridView>
    </div>
    </form>
</body>
</html>

效果图如下:

工程代码下载:http://download.csdn.net/detail/yysyangyangyangshan/8351175

时间: 2024-08-06 19:46:37

NPOI操作Excel 002:读取Excel的相关文章

C#操作Excel文件(读取Excel,写入Excel)

看到论坛里面不断有人提问关于读取excel和导入excel的相关问题.闲暇时间将我所知道的对excel的操作加以总结,如今共享大家,希望给大家可以给大家带了一定的帮助.另外我们还要注意一些简单的问题1.excel文件仅仅能存储65535行数据,假设你的数据大于65535行,那么就须要将excel切割存放了.2.关于乱码,这主要是字符设置问题. 1.载入Excel(读取excel内容)返回值是一个DataSet //载入Excel public static DataSet LoadDataFro

NPOI 导入Excel和读取Excel

1.整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表):Sheet:行:Row:单元格Cell. 2.NPOI是POI的C#版本,NPOI的行和列的index都是从0开始 3.POI读取Excel有两种格式一个是HSSF,另一个是XSSF. HSSF和XSSF的区别如下: HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file format. XSSF is the

c#操作excel方式三:使用Microsoft.Office.Interop.Excel.dll读取Excel文件

1.引用Microsoft.Office.Interop.Excel.dll 2.引用命名空间.使用别名 [csharp] view plaincopy using System.Reflection; using Excel = Microsoft.Office.Interop.Excel; 3.写入excel 写入函数 [csharp] view plaincopy public void ToExcel(string strTitle) { int nMax = 9; int nMin =

java生成excel和读取excel例子

关于使用java的操作excel的方法有很多种,我的http://blog.csdn.net/qq_20545159/article/details/45132041价绍过,下面是使用jxl生成xls格式的excel简单的代码. 使用jxl生成excel文件首先必须将jxl.jar的包加到你的项目的路径下. package com.silence.excel; import java.io.File; import jxl.Workbook; import jxl.write.Label; im

c# .Net :Excel NPOI导入导出操作教程之读取Excel文件信息及输出

using NPOI.HSSF.UserModel;using NPOI.SS.UserModel;using System;using System.Collections.Generic;using System.IO; //创建文件流对象        using (FileStream filesrc = File.OpenRead(@"C:\Users\Administrator\Desktop\123.xls"))        {            //工作簿对象获取

NPOI读取Excel,导入数据到Excel练习01

NPOI 2.2.0.0,初级读取导入Excel 1.读取Excel,将数据绑定到dgv上 1 private void button1_Click(object sender, EventArgs e) 2 { 3 List<Book> books = new List<Book>(); 4 //1.读取Excel文件 5 using (FileStream fsReder = File.OpenRead("练习.xlsx")) 6 { 7 //2.创建工作簿

NPOI操作EXCEL(二)——大量不同模板时设计方式

上一篇文章介绍了一些NPOI的基础接口,我们现在就来看看具体怎么用NPOI来解析一个EXCEL. 博主现在有这么一堆excel需要解析数据入库: 当然这只是员工的简要模板,还有很多其他的模板.我们可以要求线下人员把表头都做成像这样的表头,但是数据的列数与各列内容是不受我们所控制的.那么我们需要的就是一个公用的方法,能够解析这一类表头的excel数据. 既然每种表对应着一张数据库表,字段不一样,那么我们的方法就考虑到使用反射机制来给泛型DTO属性赋值.具体每个excel表的各列与DTO属性字段的对

C# 使用NPOI 操作Excel

首先 Nuget 引入NPOI 1.读取Excel /// <summary> /// 读取Excel数据 /// </summary> public static void ReadExcel() { OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "Excel|*.xlsx;*.xls"; if (ofd.ShowDialog() == DialogResult.OK) { IWorkbook

C#读取excel等表格常用方法

0. 利用NPOI. 请查阅此插件的相关文档. 1.方法一:采用OleDB读取EXCEL文件: 把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 public DataSet ExcelToDS(string Path) { string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ Path +"

C# 读取EXCEL文件的三种经典方法

1.方法一:采用OleDB读取EXCEL文件: 把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下: public DataSet ExcelToDS(string Path) { string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ Path +";"+"Extended Properties=Excel 8.0;"; OleDb