NopiHelper Excel导出 导入

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

先上一个Helper类:

public class NopiHelper
    {
        public string DataTableToExcel(DataTable tempDataTable, string path, bool is2007 = true)
        {
            try
            {
                //创建工作薄
                var wk = GetWorkbook(is2007);
                SetHssfWorkbook(wk, tempDataTable);
                var outPath = string.Format(@"{0}.{1}", path, is2007 ? @"xlsx" : @"xls");
                using (var file = new FileStream(outPath, FileMode.Create))
                {
                    wk.Write(file);
                }
                return outPath;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public MemoryStream DataTableToExcel(DataTable tempDataTable)
        {
            try
            {
                //创建工作薄
                var wk = new HSSFWorkbook();
                SetHssfWorkbook(wk, tempDataTable);
                var file = new MemoryStream();
                wk.Write(file);
                return file;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public MemoryStream DataTableToExcel(DataSet ds)
        {
            try
            {
                var wk = new HSSFWorkbook();
                //创建工作薄
                for (int i = 0; i < ds.Tables.Count; i++)
                {
                    SetHssfWorkbook(wk, ds.Tables[i]);
                }
                var file = new MemoryStream();
                wk.Write(file);
                return file;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public MemoryStream DataTableToExcel_Xlsx(DataSet ds)
        {
            try
            {
                var wk = new XSSFWorkbook();
                //创建工作薄
                for (int i = 0; i < ds.Tables.Count; i++)
                {
                    SetHssfWorkbook(wk, ds.Tables[i]);
                }
                var file = new MemoryStream();
                wk.Write(file);
                return file;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public DataTable GetFromExcel(string filePath, bool isFirstRowColumn = true)
        {
            try
            {
                ISheet sheet = null;
                DataTable data = new DataTable();
                int startRow = 0;

                var workbook = GetWorkbook(filePath);

                sheet = workbook.GetSheetAt(0);

                if (sheet != null)
                {
                    IRow firstRow = sheet.GetRow(0);
                    int cellCount = firstRow.LastCellNum; //一行最后一个cell的编号 即总的列数

                    if (isFirstRowColumn)
                    {
                        for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
                        {
                            ICell cell = firstRow.GetCell(i);
                            if (cell != null)
                            {
                                string cellValue = cell.StringCellValue;
                                if (cellValue != null)
                                {
                                    DataColumn column = new DataColumn(cellValue);
                                    data.Columns.Add(column);
                                }
                            }
                        }
                        startRow = sheet.FirstRowNum + 1;
                    }
                    else
                    {
                        startRow = sheet.FirstRowNum;
                    }

                    //最后一列的标号
                    int rowCount = sheet.LastRowNum;
                    for (int i = startRow; i <= rowCount; ++i)
                    {
                        IRow row = sheet.GetRow(i);
                        if (row == null) continue; //没有数据的行默认是null       

                        DataRow dataRow = data.NewRow();
                        for (int j = row.FirstCellNum; j < cellCount; ++j)
                        {
                            if (row.GetCell(j) != null) //同理,没有数据的单元格都默认是null
                                dataRow[j] = row.GetCell(j).ToString();
                        }
                        data.Rows.Add(dataRow);
                    }
                }

                return data;

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public DataTable GetFromExcel(Stream stream, bool isFirstRowColumn = true)
        {
            try
            {
                ISheet sheet = null;
                DataTable data = new DataTable();
                int startRow = 0;

                var workbook = new NPOI.XSSF.UserModel.XSSFWorkbook(stream); // 2007 格式

                sheet = workbook.GetSheetAt(0);

                if (sheet != null)
                {
                    IRow firstRow = sheet.GetRow(0);
                    int cellCount = firstRow.LastCellNum; //一行最后一个cell的编号 即总的列数

                    if (isFirstRowColumn)
                    {
                        for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
                        {
                            ICell cell = firstRow.GetCell(i);
                            if (cell != null)
                            {
                                string cellValue = cell.StringCellValue;
                                if (cellValue != null)
                                {
                                    DataColumn column = new DataColumn(cellValue);
                                    data.Columns.Add(column);
                                }
                            }
                        }
                        startRow = sheet.FirstRowNum + 1;
                    }
                    else
                    {
                        startRow = sheet.FirstRowNum;
                    }

                    //最后一列的标号
                    int rowCount = sheet.LastRowNum;
                    for (int i = startRow; i <= rowCount; ++i)
                    {
                        IRow row = sheet.GetRow(i);
                        if (row == null) continue; //没有数据的行默认是null       

                        DataRow dataRow = data.NewRow();
                        for (int j = row.FirstCellNum; j < cellCount; ++j)
                        {
                            if (row.GetCell(j) != null) //同理,没有数据的单元格都默认是null
                                dataRow[j] = row.GetCell(j).ToString();
                        }
                        data.Rows.Add(dataRow);
                    }
                }

                return data;

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }


        #region Private

        private IWorkbook GetWorkbook(string path)
        {
            try
            {
                IWorkbook userModel;
                using (var file = new FileStream(path, FileMode.Open, FileAccess.Read))
                {
                    try
                    {
                        userModel = new NPOI.XSSF.UserModel.XSSFWorkbook(file); // 2007 格式
                    }
                    catch (Exception)
                    {
                        userModel = new NPOI.HSSF.UserModel.HSSFWorkbook(file); // 2003 格式
                    }
                    finally
                    {
                        file.Close();
                    }
                }
                return userModel;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }


        private IWorkbook GetWorkbook(bool is2007 = true)
        {
            try
            {
                IWorkbook userModel;
                if (is2007)
                    userModel = new NPOI.XSSF.UserModel.XSSFWorkbook(); // 2007 格式
                else
                    userModel = new NPOI.HSSF.UserModel.HSSFWorkbook(); // 2003 格式

                return userModel;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }


        private void SetHssfWorkbook(IWorkbook hssfWorkbook, DataTable tempDataTable)
        {
            try
            {
                //创建一个名称为mySheet的表
                var tb = hssfWorkbook.CreateSheet(tempDataTable.TableName);
                //标题行
                var rowhead = tb.CreateRow(0);

                for (var i = 0; i < tempDataTable.Columns.Count; i++) //写入字段
                {
                    var cell = rowhead.CreateCell(i); //在第二行中创建单元格
                    cell.SetCellValue(tempDataTable.Columns[i].Caption); //循环往第二行的单元格中添加数据
                }

                for (var y = 0; y < tempDataTable.Rows.Count; y++)
                {
                    var rowcontent = tb.CreateRow(y + 1);
                    for (int i = 0; i < tempDataTable.Columns.Count; i++)
                    {
                        var cell = rowcontent.CreateCell(i); //在第二行中创建单元格
                        cell.SetCellValue(tempDataTable.Rows[y][tempDataTable.Columns[i].ToString()].ToString());
                        //循环往第二行的单元格中添加数据
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

    }


一、Excel导出功能:

页面按钮:

 window.open("/User/UserExportExcel/?SearchPhone=" + SearchPhone);
控制器代码:

/// <summary>
        /// 导出用户列表
        /// </summary>
        /// <param name="collection"></param>
        /// <returns></returns>
        public ActionResult UserExportExcel(FormCollection collection)
        {
            try
            {
                var searchEntity = GetSelect();
                var listData = new UserBll().GetList(searchEntity).OrderByDescending(c => c.Id).ToList();

                DataSet ds = new DataSet();
                var dt = new DataTable();
                dt.Columns.Add("序号");
                dt.Columns.Add("编号");
                dt.Columns.Add("用户名");

                var i = 1;

                if (listData.Count > 20000)
                {
                    DataRow dr = dt.NewRow();
                    dr["序号"] = i++;
                    dr["编号"] = "数据过多请缩小时间范围,分批导出";
                    dr["用户名"] = "数据过多请缩小时间范围,分批导出";
                    dt.Rows.Add(dr);
                }
                else
                {
                    listData.ForEach(entity =>
                    {
                        DataRow dr = dt.NewRow();
                        dr["序号"] = i++;
                        dr["编号"] = entity.No;
                        dr["用户名"] = entity.Name;
                        dt.Rows.Add(dr);
                    });

                }
                dt.TableName = "用户列表_" + ConfigInfo.CurrrentDateTime.ToString("yyyyMMdd") + "_" + (1).ToString().PadLeft(4, '0') + ".xlsx";
                ds.Tables.Add(dt);
                string title = "用户列表(" + ConfigInfo.CurrrentDateTime.ToString("yyyyMMdd") + ")" + ".xlsx";
                var stream = new NopiHelper().DataTableToExcel_Xlsx(ds);
                return File(stream.ToArray(), "application/ms-excel", title);
            }
            catch (Exception ex)
            {
                throw;
            }
        }


二、Excel导入功能:

1 、页面代码:

<input type="file" id="ExcelFile" accept=".csv,.xlsx" />
            <input type="button" value="上传" id="btn_UploadExcel" />

            <table id="table_body" cellpadding="5" cellspacing="0" width="100%" align="center" class="grid" border="0">
                <thead>
                    <tr>
                        <th>序号</th>
                        <th>真实姓名</th>
                        <th>手机号</th>
                        <th>备注信息</th>
                    </tr>
                </thead>
                <tbody></tbody>
            </table>
            <input type="hidden" name="json" id="json" value="" />
<input type="button" value="发送XX" id="btn_SendAddInterestActivity" />
2、上传按钮JS:

//上传数据
            $("#btn_UploadExcel").click(function () {
                var obj = document.getElementById("ExcelFile");
                var formdata = new FormData();
                var fileObj = obj.files;
                for (var i = 0; i < fileObj.length; i++)
                    formdata.append("file" + i, fileObj[i]);
                $.ajax({
                    type: 'POST',
                    url: '/AddInterestActivity/UploadExcel',
                    data: formdata,
                    contentType: false,
                    processData: false
                }).then(function (data) {
                    if (!isEmpty(data)) {
                        var html = "";
                        $.each(data, function (index, value) {
                            html += "<tr>";
                            html += "<td>" + value["序号"] + "</td>";
                            html += "<td>" + value["真实姓名"] + "</td>";
                            html += "<td>" + value["手机号"] + "</td>";
                            html += "<td>" + value["备注"] + "</td>";
                            html += "</tr>";
                        });
                        $("#table_body tbody").html(html);
                    }
                    else {
                        alert("数据类型错误");
                    }
                }, function () {
                    //failCal
                });
            });

收集数据保存:

 //发送
            $("#btn_SendAddInterestActivity").click(function () {

                

                    $.messager.confirm("确认", "确定执行此操作", function (r) {
                        var tbody = $("#table_body tbody");
                        var trList = tbody.children("tr")
                        var json = [];
                        for (var i = 0; i < trList.length; i++) {
                            var tdArr = trList.eq(i).find("td");
                            var RealName = tdArr.eq(1).html();//手机号
                            var UserPhone = tdArr.eq(2).html();//手机号
                            var Remark = tdArr.eq(3).html();//备注
                            if (UserPhone.indexOf("不合格") > 0 || RealName.indexOf("不合格") > 0) {
                                alert("不合格");
                                $("#submitloading").hide();
                                return false;
                            }
                            json.push({ "UserPhone": UserPhone, "RealName": RealName, "Remark": Remark });
                        }
                        $("#json").val(JSON.stringify(json));

                        //alert("发送红包");
                        var data = { json: $("#json").val(), activityId: $("#Id").val() };
                        $.ajax({
                            type: 'POST',
                            url: '/AddInterestActivity/SendAddInterestActivity',
                            data: data,
                            success: function (msg) {
                                if (msg.ResultType == 0) {
                                    alert(msg.Message);
                                    tbody.html("");
                                }
                                else {
                                    alert("发送失败");
                                }
                            }
                        });
                    });
            });




3、上传控制器:

public ActionResult UploadExcel()
        {
            HttpFileCollectionBase fileToUpload = Request.Files;
            foreach (string file in fileToUpload)
            {
                var curFile = Request.Files[file];
                if (curFile.ContentLength < 1) continue;
                string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + System.IO.Path.GetExtension(curFile.FileName);
                if (fileName.Substring((fileName.IndexOf(".") + 1)) == "xls" || fileName.Substring((fileName.IndexOf(".") + 1)) == "xlsx" || fileName.Substring((fileName.IndexOf(".") + 1)) == "csv")
                {

                    DataTable dt = new NopiHelper().GetFromExcel(curFile.InputStream);
                    if (!dt.Columns.Contains("手机号"))
                    {
                        return null;
                    }
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        //验证“手机号”
                        var toName = dt.Rows[i]["手机号"].ToString();
                        var operationResult_ToUser = new UserBll().GetByPhone(toName);
                        if (operationResult_ToUser.ResultType != OperationResultType.Success)
                        {
                            dt.Rows[i]["手机号"] += " <span style='color:red'>(不合格)</span>";
                        }

                        ////验证“交易金额”
                        //var money = dt.Rows[i]["交易金额"].ToString();
                        //if (string.IsNullOrEmpty(money) || money == "0")
                        //{
                        //    dt.Rows[i]["交易金额"] += " <span style='color:red'>(不合格)</span>";
                        //}
                    }

                    string json = Newtonsoft.Json.JsonConvert.SerializeObject(dt);
                    return Content(json, "text/json");
                }
            }
            return null;
        }

[HttpPost]
        public ActionResult SendAddInterestActivity(string json, int activityId)
        {
            try
            {
                //var importEndTime = Convert.ToDateTime(ImportEndTime);
                if (json == "[]" || activityId == 0)
                {
                    return Json(new OperationResult(OperationResultType.Success, @"上传文件错误,或活动不存在"));
                }
                
//执行保存代码
                return Json(new OperationResult(OperationResultType.Success, @"保存成功"));
            }
            catch (Exception ex)
            {
                throw;
            }
        }



NPOIHelper 用于C#操作Execl类 支持office2010 立即下载

相关推荐

NPOIHelper 用于C#操作Execl类

NPOIHelper 用于C#操作Execl类 导入Execl 导出Execl 读取Sheet

NpoiHelper

NpoiHelper using DBUtility; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System; using System.Collections.Generic; using System.Data; using System.IO; namespace...

MaFeng 826

NPOIHelper导出

使用NPOIHelper类用于导出excel文档,可以兼容2003、2007不同版本

【转】NOPIhelper

利用npoi 对excel表的处理,excel与dataset、datatable转换等。 public class NPOIhelper    {        #region 从datatable中将数据导出excel        /// &lt;summary&gt;        /// DataTable导出Excel的MemoryStream        /// &lt;/su...

qq_25043489的博客 293

GLM-5 Pro工程化实战:开源大模型如何成为第七个全栈工程师

大语言模型正从代码补全工具升级为具备系统级工程能力的智能体。其核心在于对长程任务的状态一致性保持、工具调用的契约化执行,以及基于真实系统指标的错误归因能力——这已超越传统Copilot类工具的边界。GLM-5 Pro通过Code-Aware预训练目标与内置工程知识图谱,在128K上下文下稳定支撑Kubernetes配置修复、CI/CD自动化、跨仓库重构等复杂场景,尤其适合遗留系统现代化与技术债治理。作为可本地部署的开源模型,它支持AWQ量化与vLLM高效推理,真正实现‘不拿工资但永不疲倦’的工程协同。本文聚

weixin_30509393的博客 532

C#利用NPOI处理excel的类 NPOIHelper.cs

个人的NPOIHelp类,包括datatable导出excel,dataset导出excelexcel导入到datatable,excel导入到dataset, 更新excel中的数据,验证导入Excel是否有数据等操作 using System; using System.Collections.Generic; using System.Data; using System

jumtre的专栏 2万+

NOPI导出excel

在近在网上找了许多给予web的office空间,比如pageoffice,说是免费版的,赶脚很不错,但是用的时候却发现很多只能付费后才能使用。擦,这么忽悠人的,于是乎有学习了nopi的方式,但是网上大多用的都是HSSForwork 也就是说是office2003版本的写法,下面整理的代码是office2007版本以后的及XSSForwork,调用只需传入参数即可,希望对大家有用! 注意:

BoyceDream的博客 1427

NPOI helper

1 using NPOI.HSSF.UserModel; 2 using NPOI.HSSF.Util; 3 using NPOI.SS.UserModel; 4 using NPOI.XSSF.UserModel; 5 using System; 6 using System.Collections.Generic; 7 using Syst...

aifan2109的博客 312

NPOI在ASP.NET上传下载Excel文件的应用

做统计相关软件已经有20来年了,感觉Excel制作复杂报表是非常合适的,以前一直应用COM方法调用机器的Excel制作报表,包括字体、对齐、单元格合并、设置行列宽度等,使用起来得心应手。         随着新版本Office的发布、新操作系统的普及,以及服务器上Excel使用时常报些异常(需要重运行下Excel即可解决),间或是用户的COM相关系统文件被病毒破坏,以及要求机器上安装Excel

HuLihui's Blog 2998

一个操作Excle非常方便的工具包(NPOI)及ExcelHelper.cs类

操作Excle非常方便的NPOI工具包。 附带ExcelHelper.cs操作类。 网上的很多类似的都有不少问题。 加载本工具包并配合附带的ExcelHelper.cs操作类,都经过本人亲自调试无误!

NPOI ExcelHelper帮助类

Excel 帮助类 直接引用dll 解决了一些服务器莫名其妙报错 不需要安装excel c#代码

NPOI Excel Helper

/// <summary> /// NPOIExcel帮助类 /// </summary> public class NPOIExcelHelper { /// <summary> /// DataTable导出Excel文件 /// </summary> /// <param name="dtSource">源DataTable</param.

chinaherolts2008的博客 333

机器学习超参数优化:网格搜索与随机搜索实战指南

超参数优化是机器学习模型调优的核心环节,直接影响模型性能。与模型自动学习的参数不同,超参数如学习率、批量大小等需要人工设定。网格搜索通过穷举参数组合确保全面性,适合参数少且范围明确的场景;随机搜索则通过概率采样更高效探索高维空间,适合参数多或范围不确定的情况。两种方法在卷积神经网络等复杂模型中尤为重要,能有效解决学习率设置不当导致的收敛问题。工程实践中,合理选择评估指标、设计参数空间及管理计算资源是关键。本文结合scikit-learn实例,详解网格搜索与随机搜索的实现技巧及选型策略。

weixin_30781775的博客 488

NPOIHelper

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Data; using NPOI; using NPOI.HPSF; using NPOI.HSSF; using NPOI.HSSF.UserModel; using

kone666 1000

NOPI实现导入导出泛型List,支持自定义列

业务上需要自定义列的Excel导入导出,在网上看了好多资料,很多都是有Bug而且都是支持Excel和DataTable的转换,所以自己总结了一下,应用.NET平台上的NPOI封装了支持自定义列的Excel导入导出到泛型List。     先大概说一下思路和原理,最后会附上源代码和demo供小伙伴们参考。有问题欢迎留言~     List To Excel:     参数:泛型集合数据,

qq4165498的博客 565

NPOI使用教程附Helper

NPOI使用手册 http://www.doc88.com/p-2522072984262.html https://www.cnblogs.com/binye/articles/9349891.html NPOI使用教程附Helper https://www.cnblogs.com/wyy1234/p/10039767.html NPOI帮助类 https://www.cnblogs.com/lilixiang-go/p/12898794.html NPOI 第一篇 NPOI的下载、引用、基本使用 htt

爱她就要努力 636

Sql 语句之获取年月、年月日

1.获取年月日 select CONVERT(varchar(100), GETDATE(), 23) 输出 2017-03-06 2.获取年月 select CONVERT(varchar(7), GETDATE(), 120) 输出 2017-03

bdbql的专栏 3万+

利用list的Contains判断是否包含

1.如果为实体类型 //实体类型 var stu = new Student() {StudentId = 1, StudentName = "aaaaa"}; if (list.Contains(stu)) { Console.WriteLine("实体类型包含");

bdbql的专栏 1万+
上一篇: 对象转化成键值对
下一篇: SQL 利用游标循环添加数据
专注开发
博客等级 码龄14年 6粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值