Пример #1
0
        MemoryStream DtToMs(DataTable sourceTable, string sheetName)
        {
            HSSFWorkbook hssfworkbook = new HSSFWorkbook();
            ISheet       sheet1       = hssfworkbook.CreateSheet(sheetName);
            IRow         rowhead      = sheet1.CreateRow(0);

            // handling header.
            foreach (DataColumn column in sourceTable.Columns)
            {
                ICell headCell = rowhead.CreateCell(column.Ordinal);
                headCell.SetCellValue(column.ColumnName);

                #region 设置自适应行宽
                int CurrentColumn = column.Ordinal;
                int columnWidth   = sheet1.GetColumnWidth(CurrentColumn) / 256; //获取当前列宽度
                int length        = Encoding.UTF8.GetBytes(headCell.CString("")).Length;
                if (columnWidth < length + 1)                                   //若当前单元格内容宽度大于列宽,则调整列宽为当前单元格宽度,后面的+1是我人为的将宽度增加一个字符
                {
                    columnWidth = length + 1;
                }
                sheet1.SetColumnWidth(CurrentColumn, columnWidth * 256);
                #endregion
            }

            // handling value.
            int rowIndex = 1;

            foreach (DataRow row in sourceTable.Rows)
            {
                IRow dataRow = sheet1.CreateRow(rowIndex);
                foreach (DataColumn column in sourceTable.Columns)
                {
                    ICell icell = dataRow.CreateCell(column.Ordinal);
                    icell.SetCellValue(row[column].ToString());

                    #region 设置自适应行宽
                    int CurrentColumn = column.Ordinal;
                    int columnWidth   = sheet1.GetColumnWidth(CurrentColumn) / 256; //获取当前列宽度
                    int length        = Encoding.UTF8.GetBytes(icell.CString("")).Length;
                    if (columnWidth < length + 1)                                   //若当前单元格内容宽度大于列宽,则调整列宽为当前单元格宽度,后面的+1是我人为的将宽度增加一个字符
                    {
                        columnWidth = length + 1;
                    }
                    sheet1.SetColumnWidth(CurrentColumn, columnWidth * 256);
                    #endregion
                }
                rowIndex++;
            }
            MemoryStream file = new MemoryStream();
            hssfworkbook.Write(file);
            return(file);
        }
Пример #2
0
        /// <summary>
        /// 生成Excel
        /// </summary>
        /// <param name="sourceTable">数据源</param>
        /// <param name="sheetName">表名</param>
        /// <param name="TotalDes">汇总列显示</param>
        /// <returns></returns>
        MemoryStream DtToMsFormat(DataTable sourceTable, string sheetName, string TotalDes, string fname)
        {
            HSSFWorkbook hssfworkbook = new HSSFWorkbook();
            ISheet       sheet1       = hssfworkbook.CreateSheet(sheetName);

            #region 第二行为汇总行
            CellRangeAddress region = new CellRangeAddress(0, 0, 0, sourceTable.Columns.Count - 1); //合并第一行
            sheet1.AddMergedRegion(region);
            IRow  rowTotal = sheet1.CreateRow(0);
            ICell Icell    = rowTotal.CreateCell(0);
            Icell.SetCellValue(fname + ":" + TotalDes);
            ICellStyle style = hssfworkbook.CreateCellStyle();
            style.Alignment = HorizontalAlignment.Center;
            IFont font = hssfworkbook.CreateFont();
            font.FontHeightInPoints = 14;
            font.Boldweight         = 14;
            font.Color = HSSFColor.Red.Index;
            style.SetFont(font);
            Icell.CellStyle = style;
            #endregion

            IRow rowhead = sheet1.CreateRow(1);
            // handling header.
            foreach (DataColumn column in sourceTable.Columns)
            {
                ICell headCell = rowhead.CreateCell(column.Ordinal);
                headCell.SetCellValue(column.ColumnName);
                int columnWidth = sheet1.GetColumnWidth(column.Ordinal) / 256; //获取当前列宽度
                int length      = Encoding.UTF8.GetBytes(headCell.CString("")).Length;
                if (columnWidth < length + 1)                                  //若当前单元格内容宽度大于列宽,则调整列宽为当前单元格宽度,后面的+1是我人为的将宽度增加一个字符
                {
                    columnWidth = length + 1;
                }
                sheet1.SetColumnWidth(column.Ordinal, columnWidth * 256);
            }

            // handling value.

            int rowIndex = 2;

            foreach (DataRow row in sourceTable.Rows)
            {
                IRow dataRow = sheet1.CreateRow(rowIndex);
                foreach (DataColumn column in sourceTable.Columns)
                {
                    int   currentColumn = column.Ordinal;
                    ICell newCell       = dataRow.CreateCell(currentColumn);
                    newCell.SetCellValue(row[column].ToString());

                    int columnWidth = sheet1.GetColumnWidth(currentColumn) / 256; //获取当前列宽度
                    int length      = Encoding.UTF8.GetBytes(newCell.CString("")).Length;
                    if (columnWidth < length + 1)                                 //若当前单元格内容宽度大于列宽,则调整列宽为当前单元格宽度,后面的+1是我人为的将宽度增加一个字符
                    {
                        columnWidth = length + 1;
                    }
                    sheet1.SetColumnWidth(currentColumn, columnWidth * 256);
                }
                rowIndex++;
            }
            MemoryStream file = new MemoryStream();
            hssfworkbook.Write(file);
            return(file);
        }