前言

网上使用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

运行结果

示例代码

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] + "\n" + 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表格内容并进行修改的更多相关文章

  1. C# 读取Excel表格内容,以及NPOI的使用

    在实际的开发中,我们可能需要读写word或者Excel的内容,在我开发的项目中,需要读取Excel的内容,并将相对应的内容存储到数据库中,这里简单跟大家分享一下,希望能够帮助一些人. 我相信在读写wo ...

  2. NPOI读取Excel表格类

    public class NPOIHelper    {        private HSSFWorkbook workbook;        public static IWorkbook Lo ...

  3. java 读取 excel 表格内容

    一.添加依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</ar ...

  4. 【第二篇】.NET用NPOI读取Excel表格并在页面预览

    博主用的是npoi2.0.1,支持.xls也支持.xlsx 直接上代码吧. <table class="table table-bordered table-striped" ...

  5. 使用POI读取excel文件内容

    1.前言 项目中要求读取excel文件内容,并将其转化为xml格式.常见读取excel文档一般使用POI和JExcelAPI这两个工具.这里我们介绍使用POI实现读取excel文档. 2.代码实例: ...

  6. asp.net 使用NPOI读取excel文件

    asp.net 使用NPOI读取excel文件内容 NPOI下载地址:NPOI public class ExcelHelper { /// <summary> /// 读取Excel文件 ...

  7. .NET Core 使用NPOI读取Excel返回泛型List集合

    我是一名 ASP.NET 程序员,专注于 B/S 项目开发.累计文章阅读量超过一千万,我的博客主页地址:https://www.itsvse.com/blog_xzz.html 网上有很多关于npoi ...

  8. php 读取excel表格中的内容

    <?php /** * excel表格内容在网页中显示 * * 首先需要下载PHPExcel 工具包 * 网址: http://phpexcel.codeplex.com/releases/vi ...

  9. NPOI读取Excel到集合对象

    之前做过的项目中有个需要读取Excel文件内容的需求,因此使用NPOI实现,写下以下代码,这个只是一个代码段,还有很多地方需要优化,希望能对大家有所帮助 public static IList< ...

随机推荐

  1. Linux中进程杀掉总是自动重启

    <1> cat /proc/进程id/status   找到该子进程对应的父进程,将其父进

  2. EDI的五个常见挑战以及如何克服这些挑战

    EDI是成功进行供应链管理的一个关键要素.它使企业能够以标准化的电子格式处理与任何交易伙伴的业务数据交换,极大简化了许多曾经繁琐的程序.然而,如果企业正在扩张或处于高速增长阶段,如何充分利用EDI仍然 ...

  3. Java基础教程——线程池

    启动新线程,需要和操作系统进行交互,成本比较高. 使用线程池可以提高性能-- 线程池会提前创建大量的空闲线程,随时待命执行线程任务.在执行完了一个任务之后,线程会回到空闲状态,等待执行下一个任务.(这 ...

  4. 【震惊】手把手教你用python做绘图工具(一)

    在这篇博客里将为你介绍如何通过numpy和cv2进行结和去创建画布,包括空白画布.白色画布和彩色画布.创建画布是制作绘图工具的前提,有了画布我们就可以在画布上尽情的挥洒自己的艺术细胞. 还在为如何去绘 ...

  5. Calendar类、 System类、 StringBulider类、 包装类

    Calendar类 ​ 概念 ​ java . util . Calendar 日历类,抽象类,在Date类后出现的,替换掉了很多Date类中的方法.该类将所有的可能用到的时间信息封装为静态成员变量. ...

  6. sqlmap工具的简单使用

    0x00 sqlmap简介:sqlmap是一款针对sql漏洞的自动化注入工具,有一个非常棒的特性,即对检测与利用的自动化处理(数据库指纹.访问底层文件系统.执行命令). 官方网站下载http://sq ...

  7. 第4.3节 Python中与迭代相关的函数

    下面要介绍的enumerate.range.zip.reversed.sorted属于Python内置的函数或者类别,返回的对象都可通过迭代方法访问. 一.    enumerate函数 1.     ...

  8. Fiddle常用命令

    常用命令: 1.启动后点击上方工具栏里有个IE图标的Browse按钮(可以选择Chrome或者Firefox),可以打开系统默认的浏览器,同时也可以确认Fiddler能够抓到浏览器的包. 2.左下角黑 ...

  9. 【面试】关于get和post两种方法的不同。

    最近在面试题和笔试题中经常会看到这道题,所以打算系统的整理一下. 一般标准的答案是这样的. GET在浏览器回退时是无害的,而POST会再次提交请求(浏览器应该告知用户数据会被重新提交). GET产生的 ...

  10. redis学习之——在分布式数据库中CAP原理CAP+BASE

    分布式系统 分布式系统(distributed system) 由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成.分布式系统是建立在网络之上的软件系统.正是因为软件的特性,所以分 ...