C#Excel导出导入

using System;

using System.Collections.Generic;

using NPOI;

using NPOI.HPSF;

using NPOI.HSSF;

using NPOI.HSSF.UserModel;

using NPOI.POIFS;

using NPOI.Util;

using System.Text;

using System.IO;

using System.Data;

using System.Data.OleDb;

using NPOI.SS.UserModel;



namespace Business

{

    public class CExcelOut

    {

        /// <summary>导出EXCEL表</summary>

        /// <param name="table">table表</param>

        /// <returns>二进制流</returns>

        public MemoryStream GetExecOut(DataTable table)

        {

            if (table == null)

            {

                return null;

            }

            List<DataTable> listTable = new List<DataTable>();

            listTable.Add(table);

            return GetExecOut(listTable);

        }

        /// <summary>导入多个EXCEL表</summary>

        /// <param name="listTable">表集合</param>

        /// <returns>二进制流</returns>

        public MemoryStream GetExecOut(List<DataTable> listTable)

        {

            try

            {

                if (listTable == null || listTable.Count == 0)

                {

                    return null;

                }

                Dictionary<string, DataTable> rowTable = new Dictionary<string, DataTable>();

                for (int i = 0; i < listTable.Count; i++)

                {

                    rowTable.Add("sheet" + (i + 1), listTable[i]);

                }

                return GetExecOut(rowTable);

            }

            catch (Exception ex)

            {

                Console.WriteLine(ex.Message);

                return null;

            }

        }

        /// <summary>导入多个EXCEL表 键是表名 值是table表</summary>

        /// <param name="listTable">键值对集合</param>

        /// <returns>二进制流</returns>

        public MemoryStream GetExecOut(Dictionary<string, DataTable> listTable)

        {

            if (listTable == null || listTable.Count == 0)

            {

                return null;

            }

            HSSFWorkbook workbook = new HSSFWorkbook();

            MemoryStream ms = new MemoryStream();

            try

            {

                foreach (KeyValuePair<string, DataTable> item in listTable)

                {

                    string steerName = item.Key;

                    //文件名

                    NPOI.SS.UserModel.ISheet sheet = workbook.CreateSheet(steerName);

                    //头部

                    NPOI.SS.UserModel.IRow headerRow = sheet.CreateRow(0);

                    foreach (DataColumn itemColumn in item.Value.Columns)

                    {

                        headerRow.CreateCell(itemColumn.Ordinal).SetCellValue(itemColumn.ColumnName);

                    }

                    int rowIndex = 1;

                    foreach (DataRow itemRow in item.Value.Rows)

                    {

                        NPOI.SS.UserModel.IRow dataRow = sheet.CreateRow(rowIndex);

                        foreach (DataColumn itemColumn in item.Value.Columns)

                        {

                            dataRow.CreateCell(itemColumn.Ordinal).

                                SetCellValue(itemRow[itemColumn.ColumnName].ToString());

                        }

                        rowIndex++;

                    }

                }

                workbook.Write(ms);

                ms.Flush();

                ms.Position = 0;

                return ms;



            }

            catch (Exception ex)

            {

                Console.WriteLine(ex.Message);

                return null;

            }

            finally

            {

                workbook = null;

            }

        }

        /// <summary>把流转换为文件</summary>

        /// <param name="PathUrl">文件路径,如果文件存在则覆盖,不存在创建</param>

        /// <param name="ms">IO流</param>

        public void ExeclOut(string PathUrl, Stream ms)

        {

            try

            {

                if (PathUrl.Length == 0 || ms == null)

                {

                    return;

                }

                FileStream file = new FileStream(PathUrl, FileMode.Create);

                if (ms.CanRead)

                {

                    int lentgth = 4096;

                    byte[] by = new byte[lentgth];

                    lentgth = ms.Read(by, 0, lentgth);

                    while (lentgth != 0)

                    {

                        file.Write(by, 0, lentgth);

                        lentgth = ms.Read(by, 0, lentgth);

                    }

                    file.Close();

                }

            }

            catch (Exception ex)

            {

                Console.WriteLine(ex.Message);

            }

        }



        /// <summary>Excel表变成dataTable</summary>

        /// <param name="filePath">Excel表格路径</param>

        /// <param name="sheetName">查询表名</param>

        /// <returns>数据集合</returns>

        public DataTable GetTop1ExcelData(string filePath, string sheetName)

        {

            DataSet ds = new DataSet();

            try

            {



                string connectionString = "provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended properties=Excel 8.0;";

                string sql = "select * from [" + sheetName + "$]";

                using (OleDbConnection con = new OleDbConnection(connectionString))

                {

                    OleDbCommand cmd = new OleDbCommand(sql, con);

                    OleDbDataAdapter adapt = new OleDbDataAdapter(cmd);

                    adapt.Fill(ds);

                    if (ds != null && ds.Tables.Count > 0)

                    {

                        return ds.Tables[0];

                    }

                    return null;

                }

            }

            catch (Exception exp)

            {

                Console.WriteLine(exp.Message);

                return null;

            }

        }



        /// <summary>Excel表变成dataTable</summary>

        /// <param name="filePath">Excel表格路径</param>

        /// <param name="sheetName">查询表名</param>

        /// <returns>数据集合</returns>

        public DataTable GetExcelData(string filePath, string sheetName)

        {

            DataSet ds = new DataSet();

            try

            {

                string connectionString = "provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended properties='Excel 8.0;HDR=NO;IMEX=1'";

                string sql = "select * from [" + sheetName + "$]";

                using (OleDbConnection con = new OleDbConnection(connectionString))

                {

                    OleDbCommand cmd = new OleDbCommand(sql, con);

                    OleDbDataAdapter adapt = new OleDbDataAdapter(cmd);

                    adapt.Fill(ds);

                    if (ds != null && ds.Tables.Count > 0)

                    {

                        return ds.Tables[0];

                    }

                    return null;

                }

            }

            catch (Exception exp)

            {

                Console.WriteLine(exp.Message);

                return null;

            }

        }

        /// <summary>

        /// Excel表变成dataTable

        /// </summary>

        /// <param name="filePath">Excel表格路径</param>

        /// <returns>数据集合</returns>

        public DataTable GetExcelData(string filePath)

        {

            DataTable table = new DataTable();

            try

            {

                FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);

                HSSFWorkbook hssfWorkbook = new HSSFWorkbook(fileStream);



                ISheet iSheet = hssfWorkbook.GetSheetAt(0);

                if (iSheet != null)

                {

                    IRow iRow = iSheet.GetRow(0);

                    int cellCount = iRow.LastCellNum;



                    for (int i = iRow.FirstCellNum; i < cellCount; i++)

                    {

                        DataColumn column = new DataColumn(iRow.GetCell(i).StringCellValue);

                        table.Columns.Add(column);

                    }



                    int rowCount = iSheet.LastRowNum;

                    for (int i = (iSheet.FirstRowNum + 1); i < iSheet.LastRowNum; i++)

                    {

                        IRow row = iSheet.GetRow(i);

                        DataRow dataRow = table.NewRow();



                        for (int j = row.FirstCellNum; j < cellCount; j++)

                        {

                            if (row.GetCell(j) != null)

                            {

                                dataRow[j] = row.GetCell(j).ToString();

                            }

                        }



                        table.Rows.Add(dataRow);

                    }

                }



                fileStream.Flush();

                fileStream.Dispose();

                fileStream.Close();

                fileStream = null;



                hssfWorkbook.Dispose();

                hssfWorkbook = null;

                iSheet.Dispose();

                iSheet = null;

            }

            catch (Exception exp)

            {



            }

            finally

            {

            }

            return table;

        }

        /// <summary>

        /// App设置导出Excel模板

        /// </summary>

        /// <param name="tbData"></param>

        /// <param name="headTb"></param>

        /// <param name="steerName"></param>

        /// <returns></returns>

        public MemoryStream GetExecOut(DataTable tbData, DataTable headTb, string steerName)

        {

            if (tbData == null || tbData.Rows.Count == 0)

            {

                return null;

            }

            HSSFWorkbook workbook = new HSSFWorkbook();

            MemoryStream ms = new MemoryStream();

            try

            {

                //文件名

                NPOI.SS.UserModel.ISheet sheet = workbook.CreateSheet(steerName);

                ICellStyle style = GetStyle(workbook);

                ICellStyle styleLeft = GetStyle(workbook, HorizontalAlignment.LEFT);

                ICellStyle styleSize = GetStyle(workbook, 11);



                int rowIndex = 0;

                //头部

                NPOI.SS.UserModel.IRow headerRow = sheet.CreateRow(rowIndex);

                ICell cell = headerRow.CreateCell(0, CellType.STRING);

                cell.SetCellValue("分层标电子水准测量记录手簿");

                cell.CellStyle = style;

                sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 0, 7));

                //设置单元格的高度实际是设置其所在行高,所以要在单元格所在行上设置行高,行高设置数值好像是像素点的1/20,所以*20以便达到设置效果;

                //设置单元格的宽度实际上是设置其所在列宽,所以要在单元格所在列上设置(列的设置在工作表上),宽度数值好像是字符的1/256,所以*256以便达到设置效果。

                for (int i = 0; i < 8; i++)

                {

                    sheet.SetColumnWidth(i, 30 * 140);

                }

                headerRow.Height = 20 * 21;

                rowIndex++;

                foreach (DataRow itemRow in headTb.Rows)

                {

                    headerRow = sheet.CreateRow(rowIndex);

                    cell = headerRow.CreateCell(0, CellType.STRING);

                    cell.SetCellValue(itemRow["Columns1"].ToString());

                    cell.CellStyle = style;



                    cell = headerRow.CreateCell(1, CellType.STRING);

                    cell.SetCellValue(itemRow["Columns2"].ToString());

                    cell.CellStyle = styleLeft;



                    cell = headerRow.CreateCell(2, CellType.STRING);

                    cell.CellStyle = style;



                    cell = headerRow.CreateCell(3, CellType.STRING);

                    cell.CellStyle = style;



                    cell = headerRow.CreateCell(4, CellType.STRING);

                    cell.SetCellValue(itemRow["Columns3"].ToString());

                    cell.CellStyle = style;



                    cell = headerRow.CreateCell(5, CellType.STRING);

                    cell.SetCellValue(itemRow["Columns4"].ToString());

                    cell.CellStyle = styleLeft;



                    cell = headerRow.CreateCell(6, CellType.STRING);

                    cell.CellStyle = style;



                    cell = headerRow.CreateCell(7, CellType.STRING);

                    cell.CellStyle = style;



                    headerRow.Height = 20 * 21;

                    //跨行 跨列 起始行 终止行 起始列 终止列

                    sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 1, 3));

                    sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 5, 7));

                    rowIndex++;

                }

                NPOI.SS.UserModel.IRow dataRow = sheet.CreateRow(rowIndex);

                dataRow.Height = 20 * 22;

                sheet.SetColumnWidth(rowIndex, 30 * 140);

                cell = dataRow.CreateCell(0, CellType.STRING);

                cell.SetCellValue("测回编号");

                cell.CellStyle = styleSize;



                cell = dataRow.CreateCell(1, CellType.STRING);

                cell.SetCellValue("标点编号");

                cell.CellStyle = styleSize;



                cell = dataRow.CreateCell(2, CellType.STRING);

                cell.SetCellValue("中丝读数1");

                cell.CellStyle = styleSize;



                cell = dataRow.CreateCell(3, CellType.STRING);

                cell.SetCellValue("中丝读数2");

                cell.CellStyle = styleSize;



                cell = dataRow.CreateCell(4, CellType.STRING);

                cell.SetCellValue("中丝读数3");

                cell.CellStyle = styleSize;



                cell = dataRow.CreateCell(5, CellType.STRING);

                cell.SetCellValue("距离");

                cell.CellStyle = styleSize;



                cell = dataRow.CreateCell(6, CellType.STRING);

                cell.SetCellValue("中丝读数均值");

                cell.CellStyle = styleSize;



                cell = dataRow.CreateCell(7, CellType.STRING);

                cell.SetCellValue("高差");

                cell.CellStyle = styleSize;



                rowIndex++;

                foreach (DataRow itemRow in tbData.Rows)

                {

                    dataRow = sheet.CreateRow(rowIndex);

                    dataRow.Height = 20 * 22;

                    foreach (DataColumn itemColumn in tbData.Columns)

                    {

                        dataRow.CreateCell(itemColumn.Ordinal, CellType.STRING).SetCellValue(itemRow[itemColumn.ColumnName].ToString());

                        dataRow.Cells[itemColumn.Ordinal].CellStyle = styleSize;

                    }

                    rowIndex++;

                }

                workbook.Write(ms);

                ms.Flush();

                ms.Position = 0;

                return ms;



            }

            catch (Exception ex)

            {

                Console.WriteLine(ex.Message);

                return null;

            }

            finally

            {

                workbook = null;

            }

        }

        /// <summary>

        /// App原始中间报表导出模板

        /// </summary>

        /// <param name="tbData"></param>

        /// <returns></returns>

        public MemoryStream GetExcelOut(DataTable tbData)

        {

            if (tbData == null || tbData.Rows.Count == 0)

            {

                return null;

            }

            HSSFWorkbook workbook = new HSSFWorkbook();

            MemoryStream ms = new MemoryStream();

            try

            {

                //文件名

                NPOI.SS.UserModel.ISheet sheet = workbook.CreateSheet("Sheet1");

                ICellStyle style = GetStyle(workbook);

                ICellStyle styleSize = GetStyle(workbook, 11);



                int rowIndex = 0;

                //头部

                NPOI.SS.UserModel.IRow headerRow = sheet.CreateRow(rowIndex);

                //设置单元格的高度实际是设置其所在行高,所以要在单元格所在行上设置行高,行高设置数值好像是像素点的1/20,所以*20以便达到设置效果;

                //设置单元格的宽度实际上是设置其所在列宽,所以要在单元格所在列上设置(列的设置在工作表上),宽度数值好像是字符的1/256,所以*256以便达到设置效果。

                headerRow.Height = 20 * 21;

                foreach (DataColumn itemColumn in tbData.Columns)

                {

                    ICell cell = headerRow.CreateCell(itemColumn.Ordinal, CellType.STRING);

                    cell.SetCellValue(itemColumn.ColumnName);

                    cell.CellStyle = style;

                    //设置列宽度

                    sheet.SetColumnWidth(itemColumn.Ordinal, 30 * 160);

                }



                rowIndex++;

                foreach (DataRow itemRow in tbData.Rows)

                {

                    IRow dataRow = sheet.CreateRow(rowIndex);

                    dataRow.Height = 20 * 22;

                    foreach (DataColumn itemColumn in tbData.Columns)

                    {

                        dataRow.CreateCell(itemColumn.Ordinal, CellType.STRING).SetCellValue(itemRow[itemColumn.ColumnName].ToString());

                        dataRow.Cells[itemColumn.Ordinal].CellStyle = styleSize;

                    }

                    rowIndex++;

                }

                workbook.Write(ms);

                ms.Flush();

                ms.Position = 0;

                return ms;



            }

            catch (Exception ex)

            {

                Console.WriteLine(ex.Message);

                return null;

            }

            finally

            {

                workbook = null;

            }

        }

        /// <summary>

        /// 获取默认样式

        /// </summary>

        /// <param name="workbook"></param>

        /// <returns></returns>

        public ICellStyle GetStyle(HSSFWorkbook workbook)

        {

            return GetStyle(workbook, 14, HorizontalAlignment.CENTER_SELECTION);

        }

        /// <summary>

        /// 获取样式

        /// </summary>

        /// <param name="workbook"></param>

        /// <param name="size">设置字体大小</param>

        /// <returns></returns>

        public ICellStyle GetStyle(HSSFWorkbook workbook, short size)

        {

            return GetStyle(workbook, size, HorizontalAlignment.CENTER_SELECTION);

        }

        /// <summary>

        /// 获取样式

        /// </summary>

        /// <param name="workbook"></param>

        /// <param name="ali">设置文本居中</param>

        /// <returns></returns>

        public ICellStyle GetStyle(HSSFWorkbook workbook, HorizontalAlignment ali)

        {

            return GetStyle(workbook, 14, ali);

        }

        /// <summary>

        /// 获取样式

        /// </summary>

        /// <param name="workbook"></param>

        /// <param name="size">设置字体大小</param>

        /// <param name="ali">设置文本居中</param>

        /// <returns></returns>

        public ICellStyle GetStyle(HSSFWorkbook workbook, short size, HorizontalAlignment ali)

        {

            try

            {

                ICellStyle style = workbook.CreateCellStyle();

                //居中

                style.VerticalAlignment = VerticalAlignment.CENTER;

                //水平居中

                style.Alignment = ali;

                //设置字体

                IFont font = workbook.CreateFont();

                font.FontName = "微软雅黑";

                //设置大小

                font.FontHeightInPoints = size;

                style.SetFont(font);

                return style;

            }

            catch (Exception ex)

            {

                return null;

            }

        }



    }

}

NPOI.DLL下载地址 http://files.cnblogs.com/files/changeMe/NPOI.zip

你可能感兴趣的:(Excel)