C#.net导出标准的Excel(npoi)

    不管用哪一种语言开发应用程序,导出功能是最常见的,一般导出文件格式最常见的有PDF 、Excel、CSV、Word、TXT等,今天我们在此介绍一下Excel的导出方法。

    微软提供了导出Excel的多种办法,但是今天我们在这里只介绍一种第三方的导出方法,因为它简单,更多符合我们的编程习惯(个人观点),下面开始:

     一、下载,官网地址:https://npoi.codeplex.com/,下载后根据需要引用dll;


不说废话,直接上代码

     二、写入Excel

 //创建xls文件
        private static  void createExcel()
        {

            //创建工作薄
            HSSFWorkbook wk = new HSSFWorkbook();
            //创建一个名称为mySheet的表
            ISheet tb = wk.CreateSheet("mySheet");
            //创建第一行
            IRow rowHeader = tb.CreateRow(0);
            //设置行的高度 行高设置数值好像是像素点的1/20,所以*20以便达到设置效果;
            rowHeader.Height = 20*20;
            ICell cell_one = rowHeader.CreateCell(0);
            cell_one.SetCellValue("这是标题行");
            cell_one.CellStyle = Getcellstyle(wk, stylexls.header);

            //设置公式
            //cell_one.CellFormula = "HYPERLINK(\"测试图片.jpg\",\"测试图片.jpg\")";

            //设置单元的宽度  宽度数值好像是字符的1/256,所以*256以便达到设置效果。
            tb.SetColumnWidth(0,  20*256);

            //合并单元格 该方法的参数次序是:开始行号,结束行号,开始列号,结束列号。
            // tb.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, 3));

            //创建第二行
            IRow row = tb.CreateRow(1);
            for (int i = 0; i < 20; i++)
            {
                ICell cell = row.CreateCell(i);  //在第二行中创建单元格
                cell.SetCellValue(i);//循环往第二行的单元格中添加数据
            }

            //打开一个xls文件,如果没有则自行创建,如果存在myxls.xls文件则在创建是不要打开该文件!

            string phsicalPath = AppDomain.CurrentDomain.BaseDirectory;
            //string b = Environment.CurrentDirectory;
        
            using (FileStream fs = File.OpenWrite(string .Format(@"{0}/1.xls", phsicalPath))) 
            {
                wk.Write(fs);   //向打开的这个xls文件中写入mySheet表并保存。
                Console.WriteLine("提示:创建成功!");
            }
        }
        


     三、写入Excel

//读取xls文件
        private static  void readExcel()
        {
            StringBuilder sbr = new StringBuilder();
            //生成文件的物理路径
            string phsicalPath =string.Format(@"{0}1.xls", AppDomain.CurrentDomain.BaseDirectory) ;
            using (FileStream fs = new FileStream(phsicalPath, FileMode.OpenOrCreate)) //打开1.xls文件
            {
                HSSFWorkbook wk = new HSSFWorkbook(fs);   //把xls文件中的数据写入wk中

                //NumberOfSheets是Excel中总共的表数量
                for (int i = 0; i < wk.NumberOfSheets; i++)  
                {

                    //读取表数据
                    ISheet sheet = wk.GetSheetAt(i);

                    //LastRowNum 是当前表的总行数
                    for (int j = 0; j <= sheet.LastRowNum; j++) 
                    {
                        //读取当前行数据
                        IRow row = sheet.GetRow(j);  
                        if (row != null)
                        {
                            sbr.Append("-------------------------------------\r\n"); //行与行之间的界限

                            //LastCellNum 是当前行的总列数
                            for (int k = 0; k <= row.LastCellNum; k++) 
                            {

                                //当前表格
                                ICell cell = row.GetCell(k); 
                                if (cell != null)
                                {
                                    //获取单元格的数据值 并 转换为字符串类型
                                    sbr.Append(cell.ToString());  
                                }
                            }
                        }
                    }
                }
            }


            string phsicalPath_txt = string.Format(@"{0}myText.txt", AppDomain.CurrentDomain.BaseDirectory);
            //把读取xls文件的数据写入myText.txt文件中
            using (StreamWriter wr = new StreamWriter(new FileStream(phsicalPath_txt, FileMode.Append)))
            {
                wr.Write(sbr.ToString());
                wr.Flush();
            }
            Console.WriteLine("读取成功");
        }



================相关代码==============

        #region 定义单元格常用到样式的枚举
        public enum stylexls
        {
            header,
            url,
            time,
            number,
            money,
            百分比,
            中文大写,
            科学计数法,
            默认
        }
        #endregion

       #region 定义单元格常用到样式
        static ICellStyle Getcellstyle(IWorkbook wb, stylexls str)
        {
          

            //定义几种字体  
            IFont font = wb.CreateFont();
            font.FontHeightInPoints = 10;
            font.FontName = "微软雅黑";


            ICellStyle cellStyle = wb.CreateCellStyle();
            //边框  
            cellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Dotted;
            cellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Hair;
            cellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Hair;
            cellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Dotted;

            //边框颜色  
            //cellStyle.BottomBorderColor = HSSFColor.OLIVE_GREEN.BLUE.index;
           // cellStyle.TopBorderColor = HSSFColor.OLIVE_GREEN.BLUE.index;

            //背景图形,我没有用到过。
           // cellStyle.FillForegroundColor = HSSFColor.OLIVE_GREEN.BLUE.index;

            //水平对齐  
            cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Left;

            //垂直对齐  
            cellStyle.VerticalAlignment = VerticalAlignment.Center;

            //自动换行  
            cellStyle.WrapText = true;

            //缩进;当设置为1时,前面留的空白太大了。希旺官网改进。或者是我设置的不对  
            cellStyle.Indention = 0;

            //上面基本都是设共公的设置  
            //下面列出了常用的字段类型  
            switch (str)
            {
                case stylexls.header:
                    //设置字体加粗样式
                    font.Boldweight = short.MaxValue;
                    font.Color = HSSFColor.Red.Index;
                    font.IsItalic = true;//下划线  
                    break;
                case stylexls.time:
                    IDataFormat datastyle = wb.CreateDataFormat();
                    cellStyle.DataFormat = datastyle.GetFormat("yyyy/mm/dd");
                    break;
                case stylexls.number:
                    cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00");
                    break;
                case stylexls.money:
                    IDataFormat format = wb.CreateDataFormat();
                    cellStyle.DataFormat = format.GetFormat("¥#,##0");
                    break;
                case stylexls.url:
                    font.Underline = FontUnderlineType.Single;
                    break;
                case stylexls.百分比:
                    cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00%");
                    break;
                case stylexls.中文大写:
                    IDataFormat format1 = wb.CreateDataFormat();
                    cellStyle.DataFormat = format1.GetFormat("[DbNum2][$-804]0");
                
                    break;
                case stylexls.科学计数法:
                    cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00E+00");
                    break;
                case stylexls.默认:
                    break;
            }


            cellStyle.SetFont(font);
            return cellStyle;

        }
        #endregion  

      根据这个例子就可以生成 标准的excel了,祝你顺利!

你可能感兴趣的:(C#.net导出标准的Excel(npoi))