关于NPOI操作(一) 判空读写数据

          掐指一算,有将近半年的时间没更新,这期间,发生了诸多来自生活,工作之间的琐事,逝者已去,生者如斯,真希望能一如既往的活出那个少年样子,无畏,逐浪,随心,闲言少叙,直奔主题。

关于判断 word,excel 文档是否为空的业务逻辑,对于Office而言,新建的空文件大小均为0kb,所以用IO流直接读取后判断长度即可,但是对于WPS的文件,即使是新建的空文件,大小也都是10K以上不等,目前能想到的思路还是通过一些第三方的轮子来操作,像功能强大的Apose 组件收费,Microsoft.Office library 太依赖于本地office的环境,还有版本的问题,最后兜兜转转绕了一圈,还是选择NPOI ,只需要选择好下载版本即可。

       下载npoi Nuget包,针对Excel,有非常多的核心功能可供调用,如下操作,可以支持2003、2007

   public static bool ReadExcel(string path)
        {
            try
            {
                var strExtension = Path.GetExtension(path).ToLower();
                using (FileStream fs = File.OpenRead(path))
                {
                    //WorkbookFactory 自动识别2003(HSSFWorkbook ),或者更高版本(WSSFWorkbook ),
                    IWorkbook workbook = WorkbookFactory.Create(fs);
                    //遍历工作表Sheet
                    for (int i = 0; i < workbook.NumberOfSheets; i++)
                    {
                        //当前工作表
                        var currSheet = workbook.GetSheetAt(i);
                        //遍历工作表行数
                        for (int j = 0; j <= currSheet.LastRowNum; j++)
                        {
                            //当前行所在的列
                            var count = currSheet.GetRow(j) == null ? 0 : currSheet.GetRow(j).Count();
                            return count < 1;
                        }
                    }
                    return false;
                }
            }
            catch
            {
                return false;
            }
        }

       对于wps 的word 而言,XWPFDocument 只支持2007及以上的版本,但是对于2003的版本,一直都是报错的,进一步研究发现,NPOI 包中无 HWPFDocument 对象,github上的源码中是有的,但在发包的时候并没有,(PS:源码中的文件,作者也说明了一些自己公司的一些不平事,被离职,这里深感悲愤),所以可以把源码中的 HWPFDocument  对象的相关类拷贝出来,放在项目中运行即可,后来在Nuget程序包发现了 有人专门针对 word 2003版本的NPOI 打过一个包,所以直接安装即可 NPOI.HWPF .

public static bool ReadWord(string path)
        {
            try
            {
                var strExtension = Path.GetExtension(path).ToLower();
                using (FileStream fs = File.OpenRead(path))
                {
                    //判断是否为2007格式
                    if (strExtension.Contains("docx"))
                    {
                        XWPFDocument doc = new XWPFDocument(fs);
                        var grap = doc.Paragraphs[0].IRuns.Count();
                        return grap < 1;
                    }
                    else
                    {
                        HWPFDocument doc = new HWPFDocument(fs);
                        return doc.CharacterLength < 1;
                    }
                }
            }
            catch (Exception ex)
            {
                return false;
            }
        }

如此,便可解决NPOI 针对日常文件判断是否为空的问题。

附加: npoi  讲excel 转 html 

  public static void ExcelToHtml(string path, string htmlpath)
        {
            try
            {
                var strExtension = Path.GetExtension(path).ToLower();
                using (FileStream fs = File.OpenRead(path))
                {
                    IWorkbook workbook = WorkbookFactory.Create(fs);
                    ExcelToHtmlConverter excelToHtmlConverter = new ExcelToHtmlConverter
                    {
                        // 设置输出参数
                        OutputColumnHeaders = false,
                        OutputHiddenColumns = false,
                        OutputHiddenRows = false,
                        OutputLeadingSpacesAsNonBreaking = false,
                        OutputRowNumbers = false,
                        UseDivsToSpan = false
                    };
                    // 处理的Excel文件
                    excelToHtmlConverter.ProcessWorkbook(workbook);
                    //添加表格样式
                    excelToHtmlConverter.Document.InnerXml =
                        excelToHtmlConverter.Document.InnerXml.Insert(
                            excelToHtmlConverter.Document.InnerXml.IndexOf("<head>", 0) + 6,
                            @"<style>table, td, th{border:0.5px solid green;width:fit-content}th{background-color:green;color:white;}</style>"
                        );

                    //输出的html文件   需创建对应的文件目录  这里是根目录下的doc文件夹
                    excelToHtmlConverter.Document.Save(htmlpath);
                }
            }
            catch (Exception ex)
            {
                throw;
            }
          
        }

 

posted @ 2020-05-11 22:44  郎中令  阅读(1034)  评论(0编辑  收藏  举报