使用NPOI读取Excel表格内容并进行修改

摘要:
前言在互联网上有许多使用NPOI读取Excel文件的例子。这篇文章引用了一些在线大神的例子来进行修改,以满足他们的需求。IsPostBack){ExportToExcelByTemplate();}}#Region根据学校课程模板publicvoidExportToExcelByTemplate()导出Excel表格{stringsYear1=base.YearBegin;stringsYear2=base.YearEnd;stringsSemester=base.Term;stringsYear=sYear1+“-”+sYear2;try{#Region获取课程数据_CourseModel=newModel.Curse{OrgNo=CurrentOperator.OrgNo,YearStr=sYear,Semester=sSemester}_ CourseBLL=newBLL。课程();DataTabledtResult=_课程BLL。获取完整课程;#Endregion#region打开Excel表格模板并将其初始化为NPOI对象IWorkbookwk=null;stringfilePath=服务器。地图路径;If(!“,MessageType.Normal);return;}strixtension=System.IO.Path.GetExtension;FileStreamfs=File.OpenRead;If{//将xls文件中的数据写入wk-wk=newHSSFWorkbook;}否则{//将xlsx文件中的数据写入wk-wk=newXSSFWorkbook;}fs。Close();#Endregion#region数据处理//1.读取Excel ISheetsheet=wk中的第一张工作表。GetSheetAt;IRowrow=空;//数据行ICellcell=null//数据行//2中的列。添加Excel数据行//获取数据行数intiCount=dtResult。排。计数对于//循环时间:数据行-1,因为默认情况下已添加一行Excel单元格行。

前言

网上使用NPOI读取Excel文件的例子现在也不少,本文就是参考网上大神们的例子进行修改以适应自己需求的。

参考博文

http://www.cnblogs.com/restran/p/3889479.html

本文使用的NPOI版本是 2.1.1.0(.net2.0)  下载链接   https://files.cnblogs.com/files/masonblog/NPOI2-1-1DotNet2-0.zip

本例Excel表格   https://files.cnblogs.com/files/masonblog/NPOIExcelTestRun.zip

运行结果

使用NPOI读取Excel表格内容并进行修改第1张

 使用NPOI读取Excel表格内容并进行修改第2张

示例代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.IO;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using NPOI.HSSF.UserModel;

namespace CourseMgr
{
    public partial class EntireSchoolCourse : PageBase
    {
        BLL.Course _CourseBLL = null;
        Model.Course _CourseModel = null;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ExportToExcelByTemplate();
            }
        }       

        #region 根据学校课程表模板导出Excel表格

        public void ExportToExcelByTemplate()
        {
            string sYear1 = base.YearBegin;
            string sYear2 = base.YearEnd;
            string sSemester = base.Term;
            string sYear = sYear1 + "-" + sYear2;
            try
            {
                #region 获取课程表数据
                _CourseModel = new Model.Course
                {
                    OrgNo = CurrentOperator.OrgNo,
                    YearStr = sYear,
                    Semester = sSemester
                };
                _CourseBLL = new BLL.Course();
                DataTable dtResult = _CourseBLL.GetEntireSchoolCourse(_CourseModel);
                #endregion

                #region 打开Excel表格模板,并初始化到NPOI对象中
                IWorkbook wk = null;
                string filePath = Server.MapPath(@"~/Upload/CourseExportTemplate/学校课程表模板.xls");
                if (!File.Exists(filePath))
                {
                    Windows.MessageBox(Page, "导出失败:课程表模板不存在!", MessageType.Normal);
                    return;
                }
                string extension = System.IO.Path.GetExtension(filePath);
                FileStream fs = File.OpenRead(filePath);
                if (extension.Equals(".xls"))
                {
                    //把xls文件中的数据写入wk中
                    wk = new HSSFWorkbook(fs);
                }
                else
                {
                    //把xlsx文件中的数据写入wk中
                    wk = new XSSFWorkbook(fs);
                }
                fs.Close();
                #endregion

                #region 数据处理
                //1.读取Excel表格中的第一张Sheet表
                ISheet sheet = wk.GetSheetAt(0);
                IRow row = null;//数据行
                ICell cell = null;//数据行中的某列
                //2.添加Excel数据行。处理表格的边框,没有数据的数据行就没有内外边框。
                //获取数据行数(班级数量)
                int iCount = dtResult.Rows.Count;
                for (int i = 0; i < iCount - 1; i++)//循环次数:数据行-1,因为已经默认添加了一行Excel单元行。
                {
                    //从第二行复制出新行,主要是单元格的属性已经在第二行中设置好。
                    sheet.CopyRow(2, 2 + 1 + i);
                }
                //3.填充数据
                string sCourceTeacher = string.Empty;//从DataTable中获取的课程信息
                string[] strCourceTeacher = null;//将课程名称和教师名称分割开
                //3.1从索引2(第三行)开始填充单元格中的数据
                for (int i = 2; i < iCount + 2; i++)
                {
                    //3.2读取当前行的对象
                    row = sheet.GetRow(i);
                    if (row != null)
                    {
                        //3.3获取该行第一列,赋值班级名称
                        cell = row.GetCell(0);
                        cell.SetCellValue(dtResult.Rows[i - 2]["GradeName"].ToString() + dtResult.Rows[i - 2]["ClassName"].ToString());
                        //3.4循环获取后面列的对象
                        for (int j = 1; j < row.LastCellNum; j++)
                        {
                            cell = row.GetCell(j);
                            sCourceTeacher = dtResult.Rows[i - 2]["science" + GetWeekDaySectionByInt(j)].ToString();
                            //3.4.1如果未获取到该班级星期节次的信息,则赋值
                            if (string.IsNullOrEmpty(sCourceTeacher))
                            {
                                cell.SetCellValue("\");
                            }
                            //3.4.2获取到课程则进行赋值(课程名称在上,换行,教师名称在下)
                            else
                            {
                                strCourceTeacher = sCourceTeacher.Split('|');
                                cell.SetCellValue(strCourceTeacher[0] + "
" + strCourceTeacher[1]);
                            }
                        }
                    }
                }
                #endregion

                #region 表格导出
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                wk.Write(ms);
                Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls", HttpUtility.UrlEncode("学校总课程表", System.Text.Encoding.UTF8)));
                Response.BinaryWrite(ms.ToArray());
                Response.End();
                #endregion
            }
            catch (Exception ex)
            {
                LogWrite("导出课程表失败", ex.ToString(), CurrentOperator.Name, ResourceID);
                Windows.MessageBox(Page, "导出课程表失败", MessageType.Normal);
            }
        }

        /// <summary>
        /// 将列序号转换为节次和星期
        /// </summary>
        /// <param name="i"></param>
        /// <returns></returns>
        public string GetWeekDaySectionByInt(int i)
        {
            //i-1 ,因为第一列为标题列
            int iWeekDay = (i - 1) / 8;
            int iSection = (i - 1) % 8;

            return (iSection + 1).ToString() + (iWeekDay + 1).ToString();
        }
        #endregion
    }
}

免责声明:文章转载自《使用NPOI读取Excel表格内容并进行修改》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇eclipse/myeclipse修改内存大小(针对不同大小内存设定ini文件配置)钉钉开发笔记(四)-签名验证问题的处理下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

NPOI操作Excel简单示例

     根据网上的资料,学习了一下NPOI操作Excel的基本方法:    1、导出至Excel:标题行合并居中、设置列宽、写入列标题及数据。     public class ExportToExcel : IHttpHandler //一般处理程序ExportToExcel.ashx    {        public void ProcessRe...

.Net操作Excel —— NPOI

近期的两个项目都有关于NPOI的功能,经过了一点学习,自己也摸索了一会,感觉还有点意思。现在将部分代码分享一下。一部分是C#代码,一部分是VB.Net的,懒得修改了,基本上都是从项目文件中copy出来的。如果错漏,请指教。 概述: 1、整个Excel表格:WorkBook(工作薄),包含的叫页(工作表):Sheet;行:Row;单元格Cell。 2、NPO...

NPOI 导出Excel插入图片、设置边框样式、合并单元格、字体样式等小知识

1.设置单元格上边框为黑色实线 ICellStyle cellStyleTail = sheet.Workbook.CreateCellStyle(); cellStyleTail.BorderTop = BorderStyle.Thin; https://blog.csdn.net/ezreal_pan/article/details/81134701...

NPOI操作Excel(二)--创建Excel并设置样式

由于XSSF中的XSSFWorkbook和HSSF中的HSSFWorkbook拥有的属性、方法等都是一样的,故下面就已一个为例做为展示,他们都继承与一个接口:IWorkbook(命名空间:using NPOI.SS.UserModel;) 1、创建工作簿 1 IWorkbook myHSSFworkbook = new HSSFWorkbook(); /...

C# 之 用NPOI类库操作Excel

1、需引用以下命名空间: using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.HPSF; using NPOI.HSSF.Util; 2、接下来在内存中生成一个Excel文件,代码如下: HSSFWorkbook book = new HSSFWorkbook(); IS...

NPOI随笔——图片在单元格等比缩放且居中显示

  NPOI导出的图片默认是在单元格左上方,这使得图片在单元格显示得很难看。居中,且等比缩放,才是图片在单元格上的完美展示。         /// <summary> /// 图片在单元格等比缩放居中显示 /// </summary> /// <param na...