C#教你如何使用ASP.NET读写excel文件

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)


程序部分:

  1. 前段页面
    包含一个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>
  1. 以下是代码
//引用部分
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

  1. 读取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格式。

  1. 在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数据库里的方法。如有需要,将会后续更新!

喜欢请关注,有问题请提出,谢谢!

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值