c# 使用npoi的方式读写excel文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# 使用npoi的方式读写excel文件相关的知识,希望对你有一定的参考价值。

我是用npoi的方式把一个集合数据写入一个excel文件的,不过,我想写入的数据不要显示0出来。我试个先判断要是读入的数是0的时候,我就把该cell写入一个空的字符串,那样的话,是不会显示0出来了,但是我的公式因而用不了!所以,我想请教一下大家,有谁知道怎么处理0的显示问题,就是遇到0的时候,它自动隐蔽了!

if (val == 0) row.CreateCell(c).SetCellValue(""); //val是你要写入的值,如果等于0就写入空字符“”追问

问题是要是我后面的公式就用不了,
string formula = String.Format("1*D0+1*D0*(E0+F0+G0+H0+I0+J0+K0+L0)+M0", at_at); cell.SetCellFormula(formula);
这样就会因为我的SetCellValue("");,这公式处理不了得到的东西是####

追答

空的时候不设置公式就可以了,要不你就改下你的公式

追问

公式怎么修改那

参考技术A 首先这个问题我从两方面分析一下:
第一:
Excel里面单元格的格式是可调的,有很多数值啊、文本啊、时间一类的,但是我想了一下,对于你的问题是没有帮助的。唯一显示不了0的情况是把格式设置为数值,当你输入00123时它会保存为123,去掉的仅仅只是起始的两个0。
第二:
既然你使用的C#,为什么不发挥它的长处,面向对象的等级那么高,何必非要在Excel上纠结,完全可以自己写一个需要的软件啊。把数据处理好了再导进去岂不完美?还有啊,我个人觉得呢,NPIO不是什么好东西,跟COM组件打交道真的是一件很烦的事情,我建议你趁早换一个与COM端完全脱离的组件,比如ClosedXML,就你上面的问题,可以控制在10行代码之内搞定,何乐而不为,当然,这只是我个人的经验和观点。另外提示一下,这个组件的强大在于可以不用安装office,直接读取xlsx文件,因为读取的是XML文件;还有更加隐为人知的一点,输入到excel的时候可以控制数据类型,这可是很少有人知道的,当然我例外!
参考技术B 把0改为空格“”就行了啊 参考技术C ent. Photo: China N

C# Excel使用NPOI

程序处理excel使用using Microsoft.Office.Interop.Excel方式,运行程序需要电脑安装excel,而且excel版本还需要一样,使用起来不方便。使用NPOI不用电脑安装office.

下载地址:http://npoi.codeplex.com/

下载NPOI 2.2.1 binary package.zip,解压缩里面有Net20和Net40。我使用的Net40,把里面所有的dll添加引用。

 

读excel

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System.IO;
 private void ReadPatternExcel(string filePath,int sheetIndex)
        {
            IWorkbook workBook = null;
            ISheet sheet;
            try
            {
                FileInfo fileInfo = new FileInfo(filePath);
                if(fileInfo.Exists)
                {
                    FileStream fs = fileInfo.OpenRead();
                    switch (fileInfo.Extension)
                    {
                        //xls是03,用HSSFWorkbook打开,.xlsx是07或者10用XSSFWorkbook打开
                        case ".xls":
                            workBook = new HSSFWorkbook(fs);
                            break;
                        case ".xlsx":
                            workBook = new XSSFWorkbook(fs);
                            break;
                        default:
                            break;
                    }
                    fs.Close();//关闭文件流
                }

                if(workBook!=null)
                {
                    sheet = workBook.GetSheetAt(sheetIndex);
                    IRow headerRow = sheet.GetRow(0);
                    int colCount = headerRow.LastCellNum;//列数
                    //遍历
                    for(int i=sheet.FirstRowNum;i<=sheet.LastRowNum;i++)
                    {
                        Console.Write("row "+i.ToString()+" ");
                        NPOI.SS.UserModel.IRow row = sheet.GetRow(i);//得到一行
                        for(int j=row.FirstCellNum;j<row.LastCellNum;j++)
                        {
                            string data = row.GetCell(j).ToString();
                            Console.Write(data);
                        }
                        Console.WriteLine();
                    }
                }


            }
            catch(Exception e)
            {
                MessageBox.Show(e.Message.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                workBook = null;
                sheet = null;
            }

        }

 

以上是关于c# 使用npoi的方式读写excel文件的主要内容,如果未能解决你的问题,请参考以下文章

Npoi简单读写Excel

C#实现从EXCEL文件读取数据到SqlServer数据库

C# Excel使用NPOI

C#里使用NPOI创建EXCEL文件的简单方法

C#里使用NPOI创建EXCEL文件的简单方法

C#里使用NPOI创建EXCEL文件的简单方法