使用NPOI导入导出

public class NPOIHelper
    {


        protected static void CreateHeader(HSSFSheet excelSheet, DataTable table)
        {
            HSSFRow rowHeader = excelSheet.CreateRow(0);
            foreach (DataColumn column in table.Columns)
                rowHeader.CreateCell(column.Ordinal).SetCellValue(column.Caption);
        }


        /// <summary>
        /// 插入数据行
        /// </summary>
        protected static void InsertRow(DataTable dtSource, HSSFWorkbook excelWorkbook)
        {
            int rowCount = 0;
            int sheetCount = 1;
            HSSFSheet newsheet = null;


            //循环数据源导出数据集
            newsheet = excelWorkbook.CreateSheet("Sheet" + sheetCount); //创建第一个sheet
            CreateHeader(newsheet, dtSource);//加载sheet的头信息
            foreach (DataRow dr in dtSource.Rows)  //循环DataTable里面的数据行
            {
                rowCount++;
                //超出50000条数据 创建新的工作簿
                if (rowCount % 50000 == 0)   //超过50000行数据就新建一个sheet
                {
                    rowCount = 1;
                    sheetCount++;
                    newsheet = excelWorkbook.CreateSheet("Sheet" + sheetCount); //新建sheet
                    CreateHeader(newsheet, dtSource);//新建sheet的头信息
                }


                foreach (DataColumn column in dtSource.Columns)
                {
                    HSSFRow row = newsheet.CreateRow(rowCount);
                    row.CreateCell(column.Ordinal).SetCellValue(dtSource.Rows[rowCount][column.Ordinal].ToString());
                }
            }
        }




        /// <summary>
        /// 将DataTable转换成MemoryStream,用于导出到Excel
        /// </summary>
        /// <param name="table"></param>
        /// <returns></returns>
        public static MemoryStream RenderToExcel(DataTable table)
        {


            HSSFWorkbook hssfworkbook = new HSSFWorkbook();
            InsertRow(table, hssfworkbook);
            using (MemoryStream ms = new MemoryStream())
            {
                hssfworkbook.Write(ms);
                ms.Flush();
                ms.Position = 0;
                return ms;
            }


        }




        /// <summary>
        /// 用于Excel数据导入到数据库
        /// </summary>
        /// <param name="excelFileStream"></param>
        /// <returns></returns>
        public static DataTable RenderFromExcel(string strFileName)
        {


            DataTable table = new DataTable();
            HSSFWorkbook workbook = null;
            using (FileStream file = new FileStream(strFileName, FileMode.Open, FileAccess.Read))
            {
                workbook = new HSSFWorkbook(file);
            }


            HSSFSheet sheet = workbook.GetSheetAt(0);
            HSSFRow headerRow = sheet.GetRow(0);
            int cellCount = headerRow.LastCellNum;
            int rowCount = sheet.LastRowNum;


            for (int i = headerRow.FirstCellNum; i < cellCount; i++)
            {
                DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);
                table.Columns.Add(column);
            }


            for (int i = (sheet.FirstRowNum + 1); i <= rowCount; i++)
            {
                HSSFRow row = sheet.GetRow(i);
                DataRow dataRow = table.NewRow();
                if (row != null)
                {
                    for (int j = row.FirstCellNum; j < cellCount; j++)
                    {
                        if (row.GetCell(j) != null)
                            dataRow[j] = row.GetCell(j);
                    }
                }
                table.Rows.Add(dataRow);
            }
            return table;
        }
    }



导出 

/// <summary>
        /// 导出到Excel
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnExport_Click(object sender, EventArgs e)
        {
            try
            {
                string filename = "Barcode.xls";
                Response.ContentType = "application/vnd.ms-excel";
                Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", filename));
                Response.Clear();

                DataTable dt = new DataTable();
                dt.Columns.Add("Barcode");
                dt.Columns.Add("Product");
                dt.Columns.Add("Score");
                var data = context.BarcodeLists;
                if (context.BarcodeLists.FirstOrDefault() != null)
                {
                    foreach (BarcodeList item in data)
                    {
                        dt.Rows.Add(new object[] { item.Barcode, item.ProductList.ProductID, item.Score });
                    }
                }
                MemoryStream ms = NPOIHelper.RenderToExcel(dt);
                Response.BinaryWrite(ms.GetBuffer());
                Response.End();
            }
            catch (Exception ex)
            {
                Prj.showMessage(this, ex.Message);
                Prj.Log.Error("Error", ex);
            }

        }

导入部分代码

 DataTable dt = NPOIHelper.RenderFromExcel(HttpRuntime.AppDomainAppPath + path);

拿到了DataTable就可以插入数据库了


NPOI 实例下载

猜你喜欢

转载自blog.csdn.net/xiongxyt2/article/details/8224199