C#教你如何使用ASP.NET读写excel文件
***提示:最基础教程代码教学,完整,全面,细节,复制可用
学习内容
在学习或者工作中,Excel文件作为最基础的办公表格,会被频繁使用。很多情况下,Excel里自带的公式或者函数已经不能简单满足我们的工作需求。我们可以使用一些简单编程知识,使得我们对excel的掌控更加自如。
`提示:本次学习使用ASP.NET直接读取excel,并经过相应计算,输出为想要的相应格式的excel文件。这里需要用到NPOI项目,需要提前在VS里的【NuGet程序包管理器】中安装NPOI。
内容:
1、输入excel文件:里面包含一些水果的名称和价格。
2、输出文件:通过程序计算,在输出文件里面输出购买水果的总价。
步骤:
1.如果没有NuGet程序包管理器:
工具---->>拓展和更新 ---->> 联机---->>在右边输入框中输入uGet Package Manager---->>下载安装即可(安装完需重启VS)
2.VS有NuGet程序包管理器:
点击【工具】-【NuGet程序包管理器】-【更新】,搜索NPOI,可以看到安装包,点击下载(安装完需重启VS)
程序部分:
- 前段页面
包含一个FileUpload控件(ID为choose),用于选择上传文件,包含一个Button按钮,用于执行操作
//前端的body部分
<body>
<form id="form1" runat="server">
<div>
<asp:FileUpload ID="choose" runat="server" />
<asp:Button ID="Button1" runat="server" Text="Button" />
</div>
</form>
</body>
- 以下是代码
//引用部分
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using NPOI.HSSF.UserModel;
using NPOI.SS.Util;
注意:需提前按上面步骤引入NPOI
- 读取excel函数代码(完整)
//读取到上传的excel表格,并解析保存在excel中,方便后续操作
public String[][] ReadExcelFile(string filePath) //读取上传的excel表
{
IWorkbook workbook = null;
string IsXls = System.IO.Path.GetExtension(filePath);
try
{
FileStream fs = File.OpenRead(filePath);
if (IsXls.Equals(".xls"))
{
//把xls文件中的数据写入workbook中
workbook = new HSSFWorkbook(fs);
}
else
{ //把xlsx文件中的数据写入workbook中
workbook = new XSSFWorkbook(fs);
}
fs.Close();
//读取当前表数据
ISheet sheet = workbook.GetSheetAt(0);
IRow row = sheet.GetRow(0); //读取当前行数据
//用Arraylist数组保存读取的excel文件
//需注意的是:sheet.LastRowNum 是当前表的总行数-1
String[][] Arraylist = new String[sheet.LastRowNum + 1][]; //定义二维数组数据行
for (int m = 0; m < Arraylist.Length; m++) //定义二维数组数据列
{
Arraylist[m] = new String[row.LastCellNum];
}
//将从excel里读取出来的数据存入数组中,方便输出
for (int i = 0; i <= sheet.LastRowNum; i++)
{
row = sheet.GetRow(i); //读取当前行数据
if (row != null)
{
//LastCellNum 是当前行的总列数
for (int j = 0; j < row.LastCellNum; j++)
{
//读取i行的第j列数据保存到Arraylist数组中
try{
Arraylist[i][j] = row.GetCell(j).ToString();
}
catch (Exception c){
}
}
Console.WriteLine("\n");
}
}
return Arraylist;
}
catch (Exception e){
//只在Debug模式下才输出
Console.WriteLine(e.Message);
return null;
}
}
以上为读取excel的函数,在下面的Page_Load里直接调用这个函数ReadExcelFile(filePath);即可,支持xls,xlsx格式。
- 在Page_Load函数里操作调用ReadExcelFile(filePath);函数,读取的excel文件中的内容,并整理输出为另一个excel文件
//Page_Load函数里直接调用
protected void Page_Load(object sender, EventArgs e) //choose为文件上传框ID(这个需注意)
{
if (choose.HasFile == false)//HasFile用来检查FileUpload是否有指定文件 choose为文件上传框ID
{
Response.Write("<script>alert('请您选择Excel文件')</script> ");
return;//当无文件时,返回
}
string IsXls = Path.GetExtension(choose.FileName).ToLower();//System.IO.Path.GetExtension获得文件的扩展名
if (IsXls != ".xlsx" && IsXls != ".xls" && IsXls != ".csv")
{
Response.Write("<script>alert('只可以选择表格文件')</script>");
return;//当选择的不是Excel文件时,返回
}
string filename = choose.FileName; //获取Excel文件名 DateTime日期函数
tablename = filename.Replace(IsXls,"");
string savePath = Server.MapPath(("uploadfiles\\") + filename);//Server.MapPath 获得虚拟服务器相对路径 自己也可以写成绝对路径
choose.SaveAs(savePath); //SaveAs 将上传的文件内容保存在服务器上 这里保存在本地uploadfiles文件中
if (IsXls == ".xlsx" || IsXls == ".xls")
{
String[][] Array = ReadExcelFile(savePath); //ReadFromExcelFile(savePath)是调用自定义方法读取excel表,数据将保存在定义的二维数组Array中
IWorkbook workbook = WorkbookFactory.Create(savePath);
ISheet sheet = workbook.GetSheetAt(0);
int lll = sheet.CreateRow(0).LastCellNum;
for (int i = 0; i < sheet.LastRowNum + 1; i++) //需注意的是:sheet.LastRowNum 是当前表的总行数-1
{
IRow row = sheet.CreateRow(i); //创建行
int nn = Array[0].Length;
for (int j = 0; j < Array[0].Length; j++) //导入excel表的标题行为Array[0]
{
ICell cell = row.CreateCell(j); //实例化单元格
string value = Array[i][j].ToString();
cell.SetCellValue(value); //将模板里的数据写入新excel(注意:模板里写的数据范围内如果有空单元格,一定要先在模板里设置单元格格式,否则会异常"未将对象引用到实例")
if(Array[0][j]=="总价"){
try {
cell.SetCellValue(int.Parse(Array[i][1]) * Double.Parse(Array[i][2])); //计算总价,并写入模板的"总价"列中
}
catch (Exception c){
}
}
}
}
String exportExcelPath = "E:\\"+tablename+".xlsx"; //输出文件的路径及其名字
FileStream fs = new FileStream(exportExcelPath, FileMode.Create, FileAccess.ReadWrite); //创建输出文件excel
workbook.Write(fs);
fs.Close();
}
}
以上是Page_Load的完整部分,调用ReadExcelFile()函数,直接获取excel里面的内容,从而进行处理,最后输出!一定注意,在调用excel模板之前,一定要先实例化里面的内容,不然程序会报错(注意仔细阅读程序代码里的注释)
小结:
这里采用NPOI来进行excel 的读写,读写excel 的基本步骤就这么简单。这个程序的处理excel内容部分只是最简单的教程例子,你可以根据你的需求,在这个基础代码上改进填充,从而实现更复杂的程序设计。掌握好这个,将使得你无论在工作中还是学习上,都可以更加轻松自如的对excel进行操作,从而简化工作流程,提高工作效率。
希望这能对您有所帮助!
提示:
**以上程序是是基于excel xlsx,xls格式的读写,后续会补充csv文件的读写。另外,后面会讲解将excel文件,通过文件上传框直接上传到SQLServer数据库里的方法。如有需要,将会后续更新!
喜欢请关注,有问题请提出,谢谢!