NPOI的导入、导出实践

无格式Excel  NPOI导入code:
        protected void btnImport_Click(object sender, EventArgs e)
        {
            string filePath = Request.MapPath("/") + "FileUpload/";
            if (!System.IO.Directory.Exists(filePath))
            {
                System.IO.Directory.CreateDirectory(filePath);
            }
            if (FileUpload1.FileName != null && FileUpload1.FileName != "")
            {
                string newFilePath = filePath + FileUpload1.FileName;
                FileUpload1.SaveAs(newFilePath);
                try
                {
                    using (FileStream fs = new FileStream(newFilePath, FileMode.Open))
                    {
                        HSSFWorkbook workbook = new HSSFWorkbook(fs);
                        ISheet sheet = workbook.GetSheetAt(0);
                        int rowCount = 1;
                        int cellCount = 0;
                        List<List<OracleParameter>> sqlText = new List<List<OracleParameter>>();
                        string sql = string.Empty;
                        while (rowCount <= sheet.LastRowNum)
                        {
                            IRow row = sheet.GetRow(rowCount);
                            ArrayList arr = new ArrayList();
                            while (cellCount < row.Cells.Count)
                            {
                                ICell cell = row.GetCell(cellCount);
                                arr.Add(cell.ToString());
                                cellCount++;
                            }
                            cellCount = 0;
                            rowCount++;
                            StringBuilder strSql = new StringBuilder();
                            strSql.Append("insert into EXPORT(");
                            strSql.Append("STUDENT_NAME,STUDY_NO)");
                            strSql.Append(" values (");
                            strSql.Append(":STUDENT_NAME,:STUDY_NO)");
                            sql = strSql.ToString();
                            List<OracleParameter> listPara = new List<OracleParameter>();
                            listPara.Add(new OracleParameter(":STUDENT_NAME", arr[0].ToString()));
                            listPara.Add(new OracleParameter(":STUDY_NO", arr[1].ToString()));
                            sqlText.Add(listPara);
                        }
                        new DataAccess.SqlRunner().ExecuteSqlNonQuery(sql, sqlText);
                        BindData(true);
                        Show("导入成功!");
                    }
                }
                catch (Exception ex)
                {
                    Show(ex.Message);
                }
            }
            else
            {
                Show("请选择要上传的文件!");
            }
        }


NPOI导出Excel:

         导出按钮事件:

        protected void btnExport_Click(object sender, EventArgs e)
        {
            List<OracleParameter> paraList = new List<OracleParameter>();

            string sql = GetSqlString(out paraList);

            DataTable dt = new DataAccess.SqlRunner().ExecuteSQLFillTable(sql, paraList);

            string fileName = "货物信息_" + System.DateTime.Now.ToString("yyyy-MM-dd") + ".xls";

            string sheetName = "货物信息";

            string filePath = Request.MapPath("/TempFiles/") + fileName;

            string[] excelHeader = { "成品", "货号" };

            //自然格式导出方法1
             CreateExcelPath(dt, excelHeader, filePath, sheetName);

             DownLoadExcel(filePath);
                             
        }

GetSqlString(out paraList)方法展示:


        public string GetSqlString(out List<OracleParameter> paraList)
        {
            string strWhere = string.Empty;
            paraList = new List<OracleParameter>();
            StringBuilder strSql = new StringBuilder();
            strSql.Append("SELECT STUDENT_NAME,STUDY_NO,ROWID  ");
            strSql.Append(" FROM EXPORT t WHERE 1=1 ");
            if (!string.IsNullOrEmpty(this.txtName.Text.Trim()))
            {
                paraList.Add(new OracleParameter(":name", this.txtName.Text.Trim()));
                strSql.Append("AND t.student_name=:name ");
            }
            if (!string.IsNullOrEmpty(this.txtNo.Text.Trim()))
            {
                paraList.Add(new OracleParameter(":no", this.txtNo.Text.Trim()));
                strSql.Append("AND t.study_no=:no ");
            }
            strSql.Append(" ORDER BY t.study_no");

            return strSql.ToString();
        }


ExecuteSQLFillTable(sql, paraList)代码展示:

 

        public DataTable ExecuteSQLFillTable(string strSQL, List<OracleParameter> paraList)
        {
            DataTable dt = new DataTable();
            OracleConnection conn = new OracleConnection(strconnect);
            OracleCommand cmd = conn.CreateCommand();
            cmd.CommandText = strSQL;
            if (paraList != null)
            {
                foreach (OracleParameter temp in paraList)
                {
                    cmd.Parameters.Add(temp);
                }
            }
            OracleDataAdapter adapter = new OracleDataAdapter(cmd);
            adapter.Fill(dt);
            cmd.Parameters.Clear();
            return dt;
        }

CreateExcelPath(dt, excelHeader, filePath, sheetName)代码展示:

        public void CreateExcelPath(DataTable dt, string[] excelHeader, string filePath, string sheetName)
        {
            HSSFWorkbook workBook = new HSSFWorkbook();

            ISheet sheet = workBook.CreateSheet(sheetName);

            IRow row = sheet.CreateRow(0);

            ICell cell = row.CreateCell(0);

            ICellStyle style = workBook.CreateCellStyle();
            //设置单元格字体居中
            style.Alignment = HorizontalAlignment.CENTER;
            //设置单元格背景色
            style.FillPattern = FillPatternType.SOLID_FOREGROUND;
            style.FillForegroundColor = HSSFColor.GREY_25_PERCENT.index;
            //设置字体格式
            IFont font = workBook.CreateFont();
            font.FontHeight = 15 * 15;
            font.Color = NPOI.HSSF.Util.HSSFColor.BLUE.index;
            //把设置写入样式
            style.SetFont(font);
            //把定义的样式加入新增的单元格
            cell.CellStyle = style;

            cell.SetCellValue("货物信息");
            //合并单元格的方法            
            sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, 1));

            //SetCellRangeAddress(sheet, 0, 0, 0, 1);

            row.Height = 600;

            //添加超链接的方法
            HSSFHyperlink link = new HSSFHyperlink(HyperlinkType.URL);
            link.Address="http://mail.epass.net.cn/";
            cell.Hyperlink = link;

            row = sheet.CreateRow(1);
            //设置ExcelHeader
            for (int i = 0; i < excelHeader.Length; i++)
            {
                row.CreateCell(i).SetCellValue(excelHeader[i].ToString());
                //row.Cells[i].CellStyle = 18;
                //ICellStyle style = cell.CellStyle;
            }

            //设置ExcelBody
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                row = sheet.CreateRow(i + 2);
                for (int j = 0; j < dt.Columns.Count - 1; j++)
                {
                    row.CreateCell(j).SetCellValue(dt.Rows[i][j].ToString());
                }
            }

            if (File.Exists(filePath))
            {
                File.Delete(filePath);
            }

            using (FileStream fs = new FileStream(filePath, FileMode.Create))
            {
                workBook.Write(fs);

                fs.Close();
            }

        }

DownLoadExcel(filePath)代码展示:


        public void DownLoadExcel(string filePath)
        {
            Stream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

            string fileName = Path.GetFileName(filePath);

            byte[] buffer = new byte[10000];

            int length;

            long data = stream.Length;

            Response.ContentType = "application/octet-stream";

            Response.AddHeader("Content-Disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode(fileName, UTF8Encoding.UTF8));

            try
            {

                while (data > 0)
                {
                    if (Response.IsClientConnected)
                    {
                        length = stream.Read(buffer, 0, 10000);

                        Response.OutputStream.Write(buffer, 0, length);

                        Response.Flush();

                        buffer = new byte[10000];

                        data = data - length;
                    }
                    else
                    {
                        data = -1;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                if (stream != null)
                    stream.Close();
            }
        }


各种操作:


        /// <summary>
        /// 合并单元格
        /// </summary>
        /// <param name="sheet">操作sheet</param>
        /// <param name="rowstart">开始行索引</param>
        /// <param name="rowend">结束行索引</param>
        /// <param name="colstart">开始列索引</param>
        /// <param name="colend">结束列索引</param>
        public static void SetCellRangeAddress(ISheet sheet, int rowstart, int rowend, int colstart, int colend)
        {
            CellRangeAddress cellRangeAddress = new CellRangeAddress(rowstart, rowend, colstart, colend);
            sheet.AddMergedRegion(cellRangeAddress);
        }

        public void SaveSheetData(DataTable dt, string filePath)
        {
            //HSSFWorkbook hssfworkbook = new HSSFWorkbook();

            //string hasHead = "true";
            //ISheet sheet = hssfworkbook.GetSheetAt(0);
            //int rowIndex = 0;
            //if (hasHead == "true")
            //{
            //    rowIndex++;
            //}
            //for (int i = 0; i < dt.Rows.Count; i++)
            //{
            //    IRow dataRow = sheet.CreateRow(i + rowIndex);
            //    dataRow.CreateCell(0).SetCellValue(dt.Rows[i]["ReferenceNo"].ToString());
            //    dataRow.CreateCell(1).SetCellValue(dt.Rows[i]["G_Name"].ToString());
            //    dataRow.CreateCell(2).SetCellValue(dt.Rows[i]["G_Ename"] == null ? "" : dt.Rows[i]["G_Ename"].ToString());
            //    dataRow.CreateCell(3).SetCellValue(dt.Rows[i]["G_Description"].ToString());
            //}
            //using (FileStream file = new FileStream(filePath, FileMode.Create))
            //{
            //    hssfworkbook.Write(file);
            //    file.Close();
            //}
            HSSFWorkbook hssfworkbook = new HSSFWorkbook();

            //创建下载后的Excel的右键属性
            DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
            dsi.Company = "NPOI Team";
            hssfworkbook.DocumentSummaryInformation = dsi;

            ////create a entry of SummaryInformation
            SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
            si.Subject = "NPOI SDK Example";
            hssfworkbook.SummaryInformation = si;

            //新怎工作表1,2
            hssfworkbook.CreateSheet("Sheet1");
            hssfworkbook.CreateSheet("Sheet2");
            //hssfworkbook.CreateSheet("Sheet3");
            //hssfworkbook.CreateSheet("Sheet4");

            //merger start
            //HSSFSheet sheet = (HSSFSheet)hssfworkbook.GetSheet("Sheet2");
            //IRow row = sheet.CreateRow(0);
            //ICell cell = row.CreateCell(0);
            //cell.SetCellValue("我是中国人");
            
            //创建字体样式
            // ICellStyle style = hssfworkbook.CreateCellStyle();
            // style.Alignment = HorizontalAlignment.CENTER;
            // //create a font style
            // IFont font = hssfworkbook.CreateFont();
            // font.FontHeight = 20 * 20;
            // font.Color = NPOI.HSSF.Util.HSSFColor.RED.index;
            // style.SetFont(font);
            // cell.CellStyle = style;

            // //merged cells on single row
            // //ATTENTION: don't use Region class, which is obsolete
            // sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, 5));

            // //merged cells on mutiple rows
            // CellRangeAddress region = new CellRangeAddress(2, 4, 2, 4);
            // sheet.AddMergedRegion(region);
            //merger end

            //htyperLink start

            //ICellStyle hlink_style = hssfworkbook.CreateCellStyle();
            //IFont hlink_font = hssfworkbook.CreateFont();
            //hlink_font.Underline = (byte)FontUnderlineType.SINGLE;
            //hlink_font.Color = HSSFColor.BLUE.index;
            //hlink_style.SetFont(hlink_font);

            //ICell cell;
            // ISheet sheet = hssfworkbook.CreateSheet("Hyperlinks");

            
            // cell = sheet.CreateRow(0).CreateCell(0);
            // cell.SetCellValue("URL Link");
            //创建超链接
            // HSSFHyperlink link = new HSSFHyperlink(HyperlinkType.URL);
            // link.Address = ("http://poi.apache.org/");
            // cell.Hyperlink = (link);
            // cell.CellStyle = (hlink_style);

            // //link to a file in the current directory
            // cell = sheet.CreateRow(1).CreateCell(0);
            // cell.SetCellValue("File Link");
            // link = new HSSFHyperlink(HyperlinkType.FILE);
            // link.Address = ("link1.xls");
            // cell.Hyperlink = (link);
            // cell.CellStyle = (hlink_style);

            // //e-mail link
            // cell = sheet.CreateRow(2).CreateCell(0);
            // cell.SetCellValue("Email Link");
            // link = new HSSFHyperlink(HyperlinkType.EMAIL);
            // //note, if subject contains white spaces, make sure they are url-encoded
            // link.Address = ("mailto:poi@apache.org?subject=Hyperlinks");
            // cell.Hyperlink = (link);
            // cell.CellStyle = (hlink_style);

            //HyperLink end 

            // head start
            //ISheet s1 = hssfworkbook.CreateSheet("baoge test");
            //s1.CreateRow(0).CreateCell(1).SetCellValue(123);

            ////set header text
            //s1.Header.Left = HSSFHeader.Page;   //Page is a static property of HSSFHeader and HSSFFooter
            //s1.Header.Center = "This is a test sheet";
            ////set footer text
            //s1.Footer.Left = "Copyright NPOI Team";
            //s1.Footer.Right = "created by Tony Qu(瞿杰)";
            // head end
            ISheet sheet3 = hssfworkbook.CreateSheet("third sheet");
            ISheet sheet4 = hssfworkbook.CreateSheet("fourth sheet");
            ISheet sheet1 = hssfworkbook.CreateSheet("PictureSheet");


            HSSFPatriarch patriarch = (HSSFPatriarch)sheet1.CreateDrawingPatriarch();
            //create the anchor
            HSSFClientAnchor anchor;
            anchor = new HSSFClientAnchor(500, 200, 0, 0, 2, 2, 4, 7);
            anchor.AnchorType = 2;
            //load the picture and get the picture index in the workbook
            HSSFPicture picture = (HSSFPicture)patriarch.CreatePicture(anchor, LoadImage(@"C:\Users\Administrator\Desktop\Menu\Menu\images\demo.jpg", hssfworkbook));
            //Reset the image to the original size.
            //picture.Resize();   //Note: Resize will reset client anchor you set.
            picture.LineStyle = LineStyle.DashDotGel;

            //set enclosed border for the merged region
            //   ((HSSFSheet)sheet).SetEnclosedBorderOfRegion(region, BorderStyle.DOTTED, NPOI.HSSF.Util.HSSFColor.RED.index);

            ((HSSFSheet)hssfworkbook.GetSheetAt(0)).AlternativeFormula = true;
            ((HSSFSheet)hssfworkbook.GetSheetAt(0)).AlternativeExpression = true;

            //Write the stream data of workbook to the root directory
            FileStream file = new FileStream(filePath, FileMode.Create);
            hssfworkbook.Write(file);
            file.Close();
        }

总结很简略,有待继续完成,向大神们学习!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值