前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C# .Net Web开发中导入Excel到数据库,使用NPOI2支持2003、2007、2010等更高版本

C# .Net Web开发中导入Excel到数据库,使用NPOI2支持2003、2007、2010等更高版本

作者头像
崔文远TroyCui
发布2019-02-26 16:27:46
9610
发布2019-02-26 16:27:46
举报
文章被收录于专栏:远在上海远在上海

周五花了半天时间搞一个OA里面的Excel报表导入,使用的是吉日嘎拉的GPM架构,但是发现其DotNet.Utilities中的Excel导入类,只能支持Office2003、2007版本,对于2010版本就不支持了,通过搜索[URL=http://code.google.com/p/npoi/]NPOI官方[/URL]文档,终于找到了解决办法,可以不用再担心用户Excel文件版本的问题了。以下2篇文章起到很大作用,特别感谢Tony Qu搞出来这么好的组件。

1、《[URL=http://tonyqus.sinaapp.com/archives/575]NPOI 2教程–1.2 NPOI 2.0模块简介[/URL]》 2、《[URL=http://tonyqus.sinaapp.com/archives/482]NPOI 2.0教程 – 自动识别Excel 2003或2007格式[/URL]》

修改到的文件代码如下,请注意升级NPOI到2的版本,同时请手工添加多个dll引用,貌似1的版本只需要引用一个文件,而2的版本需要应用4个(NPOI.dll, NPOI.OOXML.dll, NPOI.OpenXml4Net.dll, ICSharpCode.SharpZipLib.dll)。

<br/>        /// <summary><br/>        /// 读取Excel<br/>        /// 默认第一行为标头<br/>        /// 支持Office 2007以上版本<br/>        /// 替换原先的方式,不存在非托管方式无法释放资源的问题<br/>        /// 适用于B/S C/S。服务器可免安装Office。<br/>        /// Pcsky 2012.05.01<br/>        /// </summary><br/>        /// <param name="path">excel文档路径</param><br/>        /// <returns></returns><br/>        public static DataTable ImportExcel(string path, int sheetIndex = 0 )<br/>        {<br/>            string columnName;<br/>            var dt = new DataTable();<br/>            //HSSFWorkbook wb;<br/>            IWorkbook wb;<br/>            using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read))<br/>            {<br/>                // 只支持2007及以下低版本<br/>                //wb = new HSSFWorkbook(file);<br/>                // 通过接口的方式实现从xls到xlsx 2003、2007以上版本的全部支持<br/>                wb = WorkbookFactory.Create(file);<br/><br/>            }<br/>            ISheet sheet = wb.GetSheetAt(sheetIndex);<br/>            System.Collections.IEnumerator rows = sheet.GetRowEnumerator();<br/>            IRow headerRow = sheet.GetRow(0);<br/>            int cellCount = headerRow.LastCellNum;<br/><br/>            // 添加datatable的标题行<br/><br/><br/>            //for (int i = 0; i < cellCount; i++)<br/>            for (int i = headerRow.FirstCellNum; i < cellCount; i++)<br/>            {<br/>                //ICell cell = headerRow.GetCell(j);<br/>                //dt.Columns.Add(cell.ToString());<br/><br/>                // 2012.09.13 Pcsky 处理空列<br/>                if (headerRow.GetCell(i) == null)<br/>                {<br/>                    columnName = Guid.NewGuid().ToString();<br/>                }<br/>                else<br/>                {<br/>                    columnName = headerRow.GetCell(i).StringCellValue;<br/>                }<br/>                DataColumn column = new DataColumn(columnName);<br/>                dt.Columns.Add(column);<br/>            }<br/><br/>            // 从第2行起添加内容行<br/>            for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)<br/>            {<br/>                IRow row = sheet.GetRow(i);<br/>                DataRow dr = dt.NewRow();<br/><br/>                // 2012.09.12 Pcsky 设置dataRow的索引号从0开始<br/>                int k = 0;<br/>                for (int j = row.FirstCellNum; j < cellCount; j++)<br/>                {<br/>      &nb sp;             //if (row.GetCell(j) != null)<br/>                    //{<br/>                    //dataRow[j] = row.GetCell(j).ToString();<br/><br/>                    dr[k] = row.GetCell(j);<br/>                    k++;<br/>                    //}<br/>                }<br/><br/>                dt.Rows.Add(dr);<br/>            }<br/>            wb = null;<br/>            sheet = null;<br/>            return dt;<br/>        }<br/>

现在想想:满足了一下用户的需求,盯了一天的电脑,同事说我眼睛都红了,而内心还挺高兴,也许这就是工作的乐趣、编程的乐趣吧,当然了,坏处就是一旦有啥东西搞不定,就会很沮丧,而影响心情和生活。我们都是凡人,没办法。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013年12月14日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档