• 导出Excel


    导出Excel
    
    操作类
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using NPOI.SS.UserModel;
    using NPOI.XSSF.UserModel;
    using NPOI.HSSF.UserModel;
    using NPOI.SS.Util;
    using NPOI.HSSF.Util;
    using System.IO;
    using System.Data;
    namespace SAFS.FundDataOperation.ExcelLib
    {
    public class ExcelWriter : IDisposable
    {
    
    #region Private Property
    private IWorkbook _workbook;
    private Stream _fileStream;
    private string _fileName;
    private EFileVersion _fileVersion { get; set; }
    
    #endregion
    
    public IWorkbook Workbook
    {
    get { return _workbook; }
    set { _workbook = value; }
    }
    
    #region Constructor
    public ExcelWriter(string fileName)
    {
    _fileName = fileName;
    if (fileName.EndsWith(".xls"))
    _fileVersion = EFileVersion.V97_2003;
    else _fileVersion = EFileVersion.V2007;
    
    using (_fileStream = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Read))
    {
    LoadFile();
    _fileStream.Close();
    _fileStream.Dispose();
    }
    }
    
    public ExcelWriter(Stream stream, EFileVersion fileVersion = EFileVersion.V2007)
    {
    _fileStream = stream;
    _fileName = string.Empty;
    _fileVersion = fileVersion;
    LoadFile();
    }
    
    #endregion
    
    #region Private Method
    private void LoadFile()
    {
    
    if (_fileVersion == EFileVersion.V97_2003)
    _workbook = new HSSFWorkbook();
    else
    _workbook = new XSSFWorkbook();
    }
    
    private void SetCellValue(ICell cell, object obj)
    {
    if (obj != null)
    {
    IDataFormat format = _workbook.CreateDataFormat();
    ICellStyle cellStyle = _workbook.CreateCellStyle();
    
    Type type = obj.GetType();
    switch (type.ToString())
    {
    case "System.String"://字符串类型
    cell.SetCellValue(obj.ToString());
    break;
    case "System.DateTime"://日期类型
    cell.SetCellValue(Convert.ToDateTime(obj));
    cellStyle.DataFormat = format.GetFormat("yyyy/MM/dd");
    cell.CellStyle = cellStyle;
    break;
    case "System.Data.SqlTypes.SqlDateTime":
    cell.SetCellValue(((System.Data.SqlTypes.SqlDateTime)(obj)).Value);
    cellStyle.DataFormat = format.GetFormat("yyyy/MM/dd");
    cell.CellStyle = cellStyle;
    break;
    case "System.TimeSpan":
    double numValue = ((TimeSpan)obj).TotalSeconds / 86400;
    cell.SetCellValue(numValue);
    cellStyle.DataFormat = format.GetFormat("hh:mm:ss");
    cell.CellStyle = cellStyle;
    break;
    case "System.Boolean"://布尔型
    cell.SetCellValue(Convert.ToBoolean(obj));
    break;
    case "System.Int16"://整型
    case "System.Int32":
    case "System.Int64":
    case "System.Byte":
    cell.SetCellValue(Convert.ToInt32(obj));
    break;
    case "System.Decimal"://浮点型
    case "System.Double":
    cell.SetCellValue(Convert.ToDouble(obj));
    break;
    case "System.DBNull"://空值处理
    cell.SetCellValue("");
    break;
    default:
    cell.SetCellValue("");
    break;
    }
    }
    }
    
    private int GetRowIndex(ISheet sheet, int startRowIndex, bool isExtended)
    {
    int rowIndex = startRowIndex;
    if (isExtended)
    rowIndex = sheet.LastRowNum + startRowIndex;
    return rowIndex;
    }
    
    private ISheet GetSheet(string sheetName)
    {
    ISheet sheet = _workbook.GetSheet(sheetName);
    if (sheet == null)
    sheet = _workbook.CreateSheet(sheetName);
    return sheet;
    }
    
    private void AddDataTableToSheet(DataTable table, ISheet sheet, int startRowIndex, int leftColuIndex, bool isColumnNameWritten, bool isExtended)
    {
    int rowIndex = GetRowIndex(sheet, startRowIndex, isExtended);
    IRow firstRow = sheet.CreateRow(rowIndex);
    
    if (isColumnNameWritten == true)
    {
    int colIndex = leftColuIndex;
    for (int j = 0; j < table.Columns.Count; ++j, colIndex++)
    {
    firstRow.CreateCell(colIndex).SetCellValue(table.Columns[j].ColumnName);
    }
    rowIndex++;
    }
    
    foreach (DataRow row in table.Rows)
    {
    IRow newRow = sheet.CreateRow(rowIndex++);
    int colIndex = leftColuIndex;
    for (int i = 0; i < table.Columns.Count; i++)
    {
    SetCellValue(newRow.CreateCell(colIndex), row[i]);
    colIndex++;
    }
    }
    }
    
    private void AddTextToSheet(string text, ISheet sheet, int rowIndex, int colIndex, bool isExtended)
    {
    int index = GetRowIndex(sheet, rowIndex, isExtended);
    
    IRow row = sheet.GetRow(index);
    if (row == null)
    row = sheet.CreateRow(index);
    
    SetCellValue(row.CreateCell(colIndex), text);
    }
    
    #endregion
    
    #region Public Method
    public void AddSheetToWorkbook(string sheetName)
    {
    _workbook.CreateSheet(sheetName);
    }
    
    public void AddDatatableToExcel(string sheetName, DataTable table, bool isColumnNameWritten = true, bool isExtended = true)
    {
    AddDatatableToExcel(sheetName, table, 0, 0, isColumnNameWritten, isExtended);
    }
    
    public void AddDatatableToExcel(string sheetName, DataTable table, int startRowIndex = 0, int leftColIndex = 0, bool isColumnNameWritten = true, bool isExtended = true)
    {
    ISheet sheet = GetSheet(sheetName);
    AddDataTableToSheet(table, sheet, startRowIndex, leftColIndex, isColumnNameWritten, isExtended);
    }
    
    public void AddTextToExcel(string sheetName, string text, int rowIndex = 0, int colIndex = 0, bool isExtended = true)
    {
    ISheet sheet = GetSheet(sheetName);
    AddTextToSheet(text, sheet, rowIndex, colIndex, isExtended);
    }
    
    public void Write()
    {
    if (!string.IsNullOrEmpty(_fileName))
    {
    using (_fileStream = File.OpenWrite(_fileName))
    {
    _workbook.Write(_fileStream);
    _fileStream.Close();
    _fileStream.Dispose();
    }
    }
    else
    {
    _workbook.Write(_fileStream);
    }
    }
    
    public void Dispose()
    {
    // Close();
    }
    
    public void SetFont(string sheetName, int rowIndex, int colIndex, string fontName, short fontSize, bool boldWeight = false,
    HorizontalAlignment horizontalAlignment = HorizontalAlignment.Left, bool withBorder = false, bool highlightForeground = false)
    {
    ISheet sheet = GetSheet(sheetName);
    IRow row = sheet.GetRow(rowIndex);
    ICell cell = row.GetCell(colIndex);
    ICellStyle style = CreateStyle(fontName, fontSize, boldWeight, horizontalAlignment, withBorder, highlightForeground);
    cell.CellStyle = style;
    }
    
    public ICellStyle CreateStyle(string fontName, short fontSize, bool boldWeight = false,
    HorizontalAlignment horizontalAlignment = HorizontalAlignment.Left, bool withBorder = false, bool highlightForeground = false, bool isText = false)
    {
    ICellStyle style = Workbook.CreateCellStyle();
    IFont font = Workbook.CreateFont();
    font.FontName = fontName;
    font.FontHeightInPoints = fontSize;
    if (boldWeight == true)
    font.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Bold;
    style.SetFont(font);
    style.Alignment = horizontalAlignment;
    if (highlightForeground)
    {
    style.FillPattern = FillPattern.SolidForeground;
    style.FillForegroundColor = HSSFColor.Red.Index;
    }
    if (withBorder)
    {
    style.BorderBottom = BorderStyle.Thin;
    style.BorderLeft = BorderStyle.Thin;
    style.BorderRight = BorderStyle.Thin;
    style.BorderTop = BorderStyle.Thin;
    }
    if (isText)
    {
    style.DataFormat = HSSFDataFormat.GetBuiltinFormat("@");
    }
    return style;
    }
    
    public void SetCellStyle(string sheetName, int rowIndex, int colIndex, ICellStyle style)
    {
    ISheet sheet = GetSheet(sheetName);
    IRow row = sheet.GetRow(rowIndex);
    ICell cell = row.GetCell(colIndex);
    cell.CellStyle = style;
    }
    
    public void SetMergedRegion(string sheetName, int firstRow, int lastRow, int firstCol, int lastCol)
    {
    ISheet sheet = GetSheet(sheetName);
    sheet.AddMergedRegion(new CellRangeAddress(firstRow, lastRow, firstCol, lastCol));
    }
    
    //public bool GenerateByPattern(string patternFileNamePath, object obj)
    //{
    // var excel = new FilePattern.ExcelPattern();
    // return excel.Generate(patternFileNamePath, obj, ref _workbook);
    //}
    
    #endregion
    }
    
    public enum EFileVersion
    {
    V97_2003,
    V2007
    }
    }
    
    //设置格式
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using NPOI.HSSF.UserModel;
    using NPOI.XSSF.UserModel;
    using NPOI.SS.UserModel;
    using NPOI.HSSF.Util;
    using NPOI.SS.Util;
    
    namespace SAFS.FundDataOperation.ExcelLib
    {
    class ExcelFormater
    {
    private IWorkbook m_workbook;
    
    public ExcelFormater(IWorkbook workbook)
    {
    m_workbook = workbook;
    }
    
    public void MergeCellsAndFormat(string sheetName, int startRow, int startColumn, int endRow, int endColumn, string fontName, short fontSize, bool boldWeight = false, bool border = true)
    {
    //SetBorderAndFont(sheetName, startRow, startColumn, endRow, endColumn, fontName, fontSize, boldWeight);//找不到后面的单元格,报错
    SetBorderAndFont(sheetName, startRow, startColumn, endRow, endColumn, fontName, fontSize, border, boldWeight);
    
    CellRangeAddress range = new CellRangeAddress(startRow, endRow, startColumn, endColumn);
    ISheet sheet = m_workbook.GetSheet(sheetName);
    sheet.AddMergedRegion(range);
    
    IRow row = sheet.GetRow(startRow);
    IFont font = m_workbook.CreateFont();
    font.FontName = fontName;
    font.FontHeightInPoints = fontSize;
    if (boldWeight == true)
    font.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Bold;
    
    ICell cell = row.GetCell(startColumn);
    ICellStyle style = m_workbook.CreateCellStyle();
    style.Alignment = HorizontalAlignment.Center;
    style.SetFont(font);
    if (border == true)
    {
    style.BorderTop = BorderStyle.Thin;
    style.TopBorderColor = HSSFColor.Black.Index;
    style.BorderBottom = BorderStyle.Thin;
    style.BottomBorderColor = HSSFColor.Black.Index;
    style.BorderLeft = BorderStyle.Thin;
    style.LeftBorderColor = HSSFColor.Black.Index;
    style.BorderRight = BorderStyle.Thin;
    style.RightBorderColor = HSSFColor.Black.Index;
    }
    
    cell.CellStyle = style;
    }
    
    public ICellStyle CreateCellStyle(string fontName, short fontSize, string direction, bool border, bool isCurrencyStyle, bool isPercentStyle, bool boldWeight)
    {
    IFont font = m_workbook.CreateFont();
    font.FontName = fontName;
    font.FontHeightInPoints = fontSize;
    if (boldWeight == true)
    font.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Bold;
    
    ICellStyle style = m_workbook.CreateCellStyle();
    style.SetFont(font);
    if (border == true)
    {
    style.BorderTop = BorderStyle.Thin;
    style.TopBorderColor = HSSFColor.Black.Index;
    style.BorderBottom = BorderStyle.Thin;
    style.BottomBorderColor = HSSFColor.Black.Index;
    style.BorderLeft = BorderStyle.Thin;
    style.LeftBorderColor = HSSFColor.Black.Index;
    style.BorderRight = BorderStyle.Thin;
    style.RightBorderColor = HSSFColor.Black.Index;
    }
    
    HorizontalAlignment align;
    switch (direction)
    {
    case "center":
    align = HorizontalAlignment.Center;
    break;
    case "right":
    align = HorizontalAlignment.Right;
    break;
    case "left":
    align = HorizontalAlignment.Left;
    break;
    default:
    align = HorizontalAlignment.Right;
    break;
    }
    style.Alignment = align;
    if (isCurrencyStyle)
    {
    IDataFormat format = m_workbook.CreateDataFormat();
    style.DataFormat = format.GetFormat("#,##0.0000");
    }
    if (isPercentStyle)
    {
    IDataFormat format = m_workbook.CreateDataFormat();
    style.DataFormat = format.GetFormat("0.00%");
    }
    return style;
    }
    
    public void SetStyle(string sheetName, int startRow, int startColumn, int endRow, int endColumn, ICellStyle style)
    {
    ISheet sheet = m_workbook.GetSheet(sheetName);
    for (int i = startRow; i <= endRow; i++)
    {
    IRow row = sheet.GetRow(i);
    for (int j = startColumn; j <= endColumn; j++)
    {
    ICell cell = row.GetCell(j);
    cell.CellStyle = style;
    }
    }
    }
    
    public void SetBorderAndFont(string sheetName, int startRow, int startColumn, int endRow, int endColumn, string fontName, short fontSize, bool border = true, bool boldWeight = false)
    {
    ISheet sheet = m_workbook.GetSheet(sheetName);
    
    IFont font = m_workbook.CreateFont();
    font.FontName = fontName;
    font.FontHeightInPoints = fontSize;
    if (boldWeight == true)
    font.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Bold;
    
    ICellStyle style = m_workbook.CreateCellStyle();
    if (border == true)
    {
    style.BorderTop = BorderStyle.Thin;
    style.TopBorderColor = HSSFColor.Black.Index;
    style.BorderBottom = BorderStyle.Thin;
    style.BottomBorderColor = HSSFColor.Black.Index;
    style.BorderLeft = BorderStyle.Thin;
    style.LeftBorderColor = HSSFColor.Black.Index;
    style.BorderRight = BorderStyle.Thin;
    style.RightBorderColor = HSSFColor.Black.Index;
    }
    
    for (int i = startRow; i <= endRow; i++)
    {
    IRow row = sheet.GetRow(i);
    for (int j = startColumn; j <= endColumn; j++)
    {
    //ICellStyle style = m_workbook.GetCellStyleAt(;
    style.SetFont(font);
    ICell cell = row.GetCell(j);
    cell.CellStyle = style;
    }
    }
    }
    
    public void SetColumnWidth(string sheetName, int columnIndex, int width)
    {
    ISheet sheet = m_workbook.GetSheet(sheetName);
    sheet.SetColumnWidth(columnIndex, width * 256);
    }
    
    public void SetDoubleRowHeight(string sheetName, int rowIndex)
    {
    ISheet sheet = m_workbook.GetSheet(sheetName);
    IRow row = sheet.GetRow(rowIndex);
    row.HeightInPoints = 2 * sheet.DefaultRowHeight / 20;
    }
    
    public void SetRrightAlignAndCurrencyStyle(string sheetName, int startRow, int startColumn, int endRow, int endColumn)
    {
    SetAlign(sheetName, startRow, startColumn, endRow, endColumn, "right", true);
    }
    
    public void SetCenterAlign(string sheetName, int startRow, int startColumn, int endRow, int endColumn)
    {
    SetAlign(sheetName, startRow, startColumn, endRow, endColumn, "center");
    }
    
    public void SetLeftAlign(string sheetName, int startRow, int startColumn, int endRow, int endColumn)
    {
    SetAlign(sheetName, startRow, startColumn, endRow, endColumn, "left");
    }
    
    private void SetAlign(string sheetName, int startRow, int startColumn, int endRow, int endColumn, string direction, bool isCurrencyStyle = false)
    {
    HorizontalAlignment align;
    switch (direction)
    {
    case "center":
    align = HorizontalAlignment.Center;
    break;
    case "right":
    align = HorizontalAlignment.Right;
    break;
    case "left":
    align = HorizontalAlignment.Left;
    break;
    default:
    align = HorizontalAlignment.Right;
    break;
    }
    
    ISheet sheet = m_workbook.GetSheet(sheetName);
    for (int i = startRow; i <= endRow; i++)
    {
    IRow row = sheet.GetRow(i);
    for (int j = startColumn; j <= endColumn; j++)
    {
    ICell cell = row.GetCell(j);
    if (cell.CellStyle != null)
    {
    cell.CellStyle.Alignment = align;
    if (isCurrencyStyle)
    {
    IDataFormat format = m_workbook.CreateDataFormat();
    cell.CellStyle.DataFormat = format.GetFormat("#,##0.0000");
    }
    }
    else
    {
    ICellStyle style = m_workbook.CreateCellStyle();
    style.Alignment = align;
    if (isCurrencyStyle)
    {
    IDataFormat format = m_workbook.CreateDataFormat();
    style.DataFormat = format.GetFormat("#,##0.0000");
    }
    cell.CellStyle = style;
    }
    }
    }
    }
    
    public void SetFont(string sheetName, int startRow, int startColumn, int endRow, int endColumn, string fontName, short fontSize, bool boldWeight = false)
    {
    ISheet sheet = m_workbook.GetSheet(sheetName);
    IFont font = m_workbook.CreateFont();
    font.FontName = fontName;
    font.FontHeightInPoints = fontSize;
    if (boldWeight == true)
    font.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Bold;
    for (int i = startRow; i <= endRow; i++)
    {
    IRow row = sheet.GetRow(i);
    for (int j = startColumn; j <= endColumn; j++)
    {
    ICell cell = row.GetCell(j);
    ICellStyle style = m_workbook.CreateCellStyle();
    style.SetFont(font);
    cell.CellStyle = style;
    
    }
    }
    }
    
    public void SetWrap(string sheetName, int startRow, int startColumn, int endRow, int endColumn)
    {
    ISheet sheet = m_workbook.GetSheet(sheetName);
    for (int i = startRow; i <= endRow; i++)
    {
    IRow row = sheet.GetRow(i);
    for (int j = startColumn; j <= endColumn; j++)
    {
    ICell cell = row.GetCell(j);
    if (cell.CellStyle != null)
    cell.CellStyle.WrapText = true;
    else
    {
    ICellStyle style = m_workbook.CreateCellStyle();
    style.WrapText = true;
    cell.CellStyle = style;
    }
    }
    }
    }
    }
    }
    
    ****************winform导出
    
    private void ExportBtn_Click(object sender, EventArgs e)
    {
    string fileName = string.Empty;
    if (list != null)
    {
    if (!string.IsNullOrEmpty(textBox1.Text.Trim()))
    {
    fileName = textBox1.Text + "_" + startTime.ToString("yyyy-MM-dd") + "_" + endTime.AddDays(-1).ToString("yyyy-MM-dd");
    }
    else
    fileName = startTime.ToString("yyyy-MM-dd") + "_" + endTime.AddDays(-1).ToString("yyyy-MM-dd");
    
    fileName = string.Concat(fileName, ".xls");
    label7.Text = "正在导出...";
    var dt = ExcelOperate.ConvertToTable(list);
    FolderBrowserDialog dialog = new FolderBrowserDialog();
    if (dialog.ShowDialog() == DialogResult.OK)
    {
    string path = Path.Combine(dialog.SelectedPath, fileName);
    ExcelOperate.SaveToExcel("估值报告",dt, path);
    }
    label7.Text = "导出完成";
    label7.Text = "";
    }
    else
    MessageBox.Show("无数据可导出!");
    }
    
    **********************************
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.IO;
    using System.Data;
    using System.Web.UI;
    using SAFS.FundDataOperation.Models;
    namespace SAFS.FundDataOperation.Mail
    {
    class ExcelOperate
    {
    public static void SaveToExcel(string sheetName, DataTable dt, string fileName)
    {
    using (ExcelLib.ExcelWriter write = new ExcelLib.ExcelWriter(fileName))
    {
    
    ExcelLib.ExcelFormater formater = new ExcelLib.ExcelFormater(write.Workbook);
    write.AddDatatableToExcel(sheetName, dt, true, false);
    SetStyle(sheetName, dt.Rows.Count, formater);
    write.Write();//导出
    }
    }
    private static void SetStyle(string sheetName, int dtCount, ExcelLib.ExcelFormater formater)
    {
    //设置格式
    // formater.MergeCellsAndFormat(sheetName, 0, 0, 0, 0, "宋体", 14, true);
    formater.SetBorderAndFont(sheetName, 0, 0, dtCount, 2, "宋体", 12,false,true);
    for (int i = 0; i < 3; i++)
    {
    if (i == 2)
    formater.SetColumnWidth(sheetName, i, 60);
    else
    formater.SetColumnWidth(sheetName, i, 50);
    }
    }
    public static DataTable ConvertToTable(List<MailModel> list)
    {
    DataTable dt = new DataTable();
    dt.Columns.Add("报告主题", typeof(string));
    dt.Columns.Add("发送时间", typeof(string));
    dt.Columns.Add("操作人", typeof(string));
    list.ToList().ForEach(d =>
    {
    dt.Rows.Add(d.ObjectMail, d.DateMail.ToString(), d.FromMail);
    });
    return dt;
    }
    
    }
    }
    
    ******************ASP 文件名为全路径
    
    MemoryStream stream = new MemoryStream();
    using (ExcelWriter writer = new ExcelWriter(stream))
    {
    ExcelFormater formater = new ExcelFormater(writer.Workbook);
    writeMeterialList(writer, "aa", formater, workType.ToString());
    }
    
    Response.Clear();
    Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", HttpUtility.UrlEncode(fileName)));
    Response.ContentType = "application/octet-stream";
    Response.BinaryWrite(stream.ToArray());
    Response.Flush();
    stream.Close();
    stream.Dispose();
    

      

  • 相关阅读:
    BZOJ 4260: Codechef REBXOR (trie树维护异或最大值)
    BZOJ 3744 Gty的妹子序列 做法集结
    BZOJ 3289: Mato的文件管理 (区间查询逆序对)
    [JSOI2007]文本生成器
    [TJOI2013]单词
    模板 AC自动机
    POJ 3710 Christmas Game
    HDU 3094 A tree game
    BZOJ 3817 Sum
    BZOJ 4589 Hard Nim
  • 原文地址:https://www.cnblogs.com/hnzheng/p/12627039.html
Copyright © 2020-2023  润新知