zoukankan      html  css  js  c++  java
  • C#多样式EXECl导出

    sing NPOI.HPSF;
    using NPOI.HSSF.UserModel;
    using NPOI.HSSF.Util;
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    namespace WindowsFormsApplication1
    {
        class Class1
        {
            /// <summary>   
            /// DataTable导出到Excel的MemoryStream   
            /// </summary>   
            /// <param name="dtSource">源DataTable</param>   
            /// <param name="strHeaderText">表头文本</param>   
            public static MemoryStream Export(DataTable dtSource, string strHeaderText)
            {
                HSSFWorkbook workbook = new HSSFWorkbook();
                HSSFSheet sheet = workbook.CreateSheet("Sheet1");
                #region 右击文件 属性信息
                {
                    DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
                    dsi.Company = "http://www.yongfa365.com/";
                    workbook.DocumentSummaryInformation = dsi;
                    SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
                    si.Author = ""; //填加xls文件作者信息   
                    si.ApplicationName = "ERP导出"; //填加xls文件创建程序信息   
                    si.LastAuthor = "GoodTek"; //填加xls文件最后保存者信息   
                    si.Comments = "ERP"; //填加xls文件作者信息   
                    si.Title = "ERP"; //填加xls文件标题信息   
                    si.Subject = "陈佳";//填加文件主题信息   
                    si.CreateDateTime = DateTime.Now;
                    workbook.SummaryInformation = si;
                }
                #endregion
                HSSFCellStyle dateStyle = workbook.CreateCellStyle();
                HSSFDataFormat format = workbook.CreateDataFormat();
                dateStyle.DataFormat = format.GetFormat("yyyy-mm-dd");
                //取得列宽   
                int[] arrColWidth = new int[dtSource.Columns.Count];
                foreach (DataColumn item in dtSource.Columns)
                {
                    arrColWidth[item.Ordinal] = Encoding.GetEncoding(936).GetBytes(item.ColumnName.ToString()).Length;
                }
                for (int i = 0; i < dtSource.Rows.Count; i++)
                {
                    for (int j = 0; j < dtSource.Columns.Count; j++)
                    {
                        int intTemp = Encoding.GetEncoding(936).GetBytes(dtSource.Rows[i][j].ToString()).Length;
                        if (intTemp > arrColWidth[j])
                        {
                            arrColWidth[j] = intTemp;
                        }
                    }
                }
                int rowIndex = 0;
                foreach (DataRow row in dtSource.Rows)
                {
                    #region 新建表,填充表头,填充列头,样式
                    if (rowIndex == 65535 || rowIndex == 0)
                    {
                        if (rowIndex != 0)
                        {
                            sheet = workbook.CreateSheet();
                        }
                        #region 表头及样式
                        {
                            HSSFRow headerRow = sheet.CreateRow(0);
                            headerRow.HeightInPoints = 25;
                            
                            headerRow.CreateCell(0).SetCellValue(strHeaderText);
                            HSSFCellStyle headStyle = workbook.CreateCellStyle();
                            // headStyle.Alignment = CellHorizontalAlignment.CENTER;
                            HSSFFont font = workbook.CreateFont();
                            font.FontHeightInPoints = 20;
                            font.Boldweight = 700;
                            headStyle.SetFont(font);
                            headerRow.GetCell(0).CellStyle = headStyle;
                            sheet.AddMergedRegion(new Region(0, 0, 0, dtSource.Columns.Count - 1));
                            // headerRow.Dispose();
                        }
                        #endregion
                        #region 列头及样式
                        {
                            HSSFRow headerRow = sheet.CreateRow(1);
                            HSSFCellStyle headStyle = workbook.CreateCellStyle();
                            // headStyle.Alignment = CellHorizontalAlignment.CENTER;
                            HSSFFont font = workbook.CreateFont();
                            font.FontHeightInPoints = 10;
                            font.Boldweight = 700;
                            headStyle.SetFont(font);
                            foreach (DataColumn column in dtSource.Columns)
                            {
                                headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);
                                headerRow.GetCell(column.Ordinal).CellStyle = headStyle;
                                //设置列宽   
                                sheet.SetColumnWidth(column.Ordinal, (arrColWidth[column.Ordinal] + 1) * 256);
                            }
                            //   headerRow.Dispose();
                        }
                        #endregion
                        rowIndex = 2;
                    }
                    #endregion
                    #region 填充内容
                    HSSFRow dataRow = sheet.CreateRow(rowIndex);
                    foreach (DataColumn column in dtSource.Columns)
                    {
                        HSSFCell newCell = dataRow.CreateCell(column.Ordinal);
                        string drValue = row[column].ToString();
                        switch (column.DataType.ToString())
                        {
                            case "System.String"://字符串类型   
                                newCell.SetCellValue(drValue);
                                break;
                            case "System.DateTime"://日期类型   
                                DateTime dateV;
                                DateTime.TryParse(drValue, out dateV);
                                newCell.SetCellValue(dateV);
                                newCell.CellStyle = dateStyle;//格式化显示   
                                break;
                            case "System.Boolean"://布尔型   
                                bool boolV = false;
                                bool.TryParse(drValue, out boolV);
                                newCell.SetCellValue(boolV);
                                break;
                            case "System.Int16"://整型   
                            case "System.Int32":
                            case "System.Int64":
                            case "System.Byte":
                                int intV = 0;
                                int.TryParse(drValue, out intV);
                                newCell.SetCellValue(intV);
                                break;
                            case "System.Decimal"://浮点型   
                            case "System.Double":
                                double doubV = 0;
                                double.TryParse(drValue, out doubV);
                                newCell.SetCellValue(doubV);
                                break;
                            case "System.DBNull"://空值处理   
                                newCell.SetCellValue("");
                                break;
                            default:
                                newCell.SetCellValue("");
                                break;
                        }
                    }
                    #endregion
                    rowIndex++;
                }
                using (MemoryStream ms = new MemoryStream())
                {
                    workbook.Write(ms);
                    ms.Flush();
                    ms.Position = 0;
                    // sheet.Dispose();
                    //workbook.Dispose();//一般只用写这一个就OK了,他会遍历并释放所有资源,但当前版本有问题所以只释放sheet   
                    return ms;
                }
            }
            /// <summary>   
            /// 用于Web导出   
            /// </summary>   
            /// <param name="dtSource">源DataTable</param>   
            /// <param name="strHeaderText">表头文本</param>   
            /// <param name="strFileName">文件名</param>   
            public static void ExportByWeb(DataTable dtSource, string strHeaderText, string strFileName)
            {
                /* HttpContext curContext = HttpContext.Current;
                 // 下载于www.51aspx.com
                 // 设置编码和附件格式   
                 curContext.Response.ContentType = "application/vnd.ms-excel";
                 curContext.Response.ContentEncoding = Encoding.UTF8;
                 curContext.Response.Charset = "";
                 curContext.Response.AppendHeader("Content-Disposition",
                     "attachment;filename=" + HttpUtility.UrlEncode(strFileName, Encoding.UTF8));
                 curContext.Response.BinaryWrite(Export(dtSource, strHeaderText).GetBuffer());
                 curContext.Response.End();*/
                 
                Console.WriteLine(Export(dtSource, strHeaderText).GetBuffer());
                byte[] buf = Export(dtSource, strHeaderText).GetBuffer();//我得到的比特数组
      
                FileStream fs = new FileStream(@"D:"+ strFileName+ ".xls", FileMode.Create, FileAccess.Write);
                fs.Write(buf, 0, buf.Length);
                fs.Flush();
                fs.Close();
            }
            /// <summary>读取excel   
            /// 默认第一行为标头   
            /// </summary>   
            /// <param name="strFileName">excel文档路径</param>   
            /// <returns></returns>   
            public static DataTable Import(string strFileName)
            {
                DataTable dt = new DataTable();
                HSSFWorkbook hssfworkbook;
                using (FileStream file = new FileStream(strFileName, FileMode.Open, FileAccess.Read))
                {
                    hssfworkbook = new HSSFWorkbook(file);
                }
                HSSFSheet sheet = hssfworkbook.GetSheetAt(0);
                System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
                HSSFRow headerRow = sheet.GetRow(0);
                int cellCount = headerRow.LastCellNum;
                for (int j = 0; j < cellCount; j++)
                {
                    HSSFCell cell = headerRow.GetCell(j);
                    dt.Columns.Add(cell.ToString());
                }
                for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
                {
                    HSSFRow row = sheet.GetRow(i);
                    DataRow dataRow = dt.NewRow();
                    for (int j = row.FirstCellNum; j < cellCount; j++)
                    {
                        if (row.GetCell(j) != null)
                            dataRow[j] = row.GetCell(j).ToString();
                    }
                    dt.Rows.Add(dataRow);
                }
                return dt;
            }
        }
    }
  • 相关阅读:
    HDU 5912 Fraction (模拟)
    CodeForces 722C Destroying Array (并查集)
    CodeForces 722B Verse Pattern (水题)
    CodeForces 722A Broken Clock (水题)
    CodeForces 723D Lakes in Berland (dfs搜索)
    CodeForces 723C Polycarp at the Radio (题意题+暴力)
    CodeForces 723B Text Document Analysis (水题模拟)
    CodeForces 723A The New Year: Meeting Friends (水题)
    hdu 1258
    hdu 2266 dfs+1258
  • 原文地址:https://www.cnblogs.com/RebornC/p/9390748.html
Copyright © 2011-2022 走看看