6月 27

公司做个监控的小东西,图省事,我用log4net打了txt的日志

使用了 零配置log4net增强使用

结果现在需要统计数据,我之后悲催的分解txt,打算导出成excel

发现了一一个好东西 NPOI

NPOI 是 POI 项目的 .NET 版本。POI是一个开源的Java读写Excel、WORD等微软OLE2组件文档的项目。
使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写。NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/Excel文档进行读写操作。

现在简单记录一下使用的代码

首先需要安装npoi组件,使用nuget

在Package Manager Console中输入命令

Install-Package NPOI

使用DataTable转Excel,这段代码来自网络

private static void GridToExcelByNPOI(DataTable dt, string strExcelFileName)
{
    try
    {
        HSSFWorkbook workbook = new HSSFWorkbook();
        ISheet sheet = workbook.CreateSheet("Sheet1");
        ICellStyle HeadercellStyle = workbook.CreateCellStyle();
        HeadercellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
        HeadercellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
        HeadercellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
        HeadercellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
        HeadercellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
        //字体
        NPOI.SS.UserModel.IFont headerfont = workbook.CreateFont();
        headerfont.Boldweight = (short)FontBoldWeight.Bold;
        HeadercellStyle.SetFont(headerfont);

        //用column name 作为列名
        int icolIndex = 0;
        IRow headerRow = sheet.CreateRow(0);
        foreach (DataColumn item in dt.Columns)
        {
            ICell cell = headerRow.CreateCell(icolIndex);
            cell.SetCellValue(item.ColumnName);
            cell.CellStyle = HeadercellStyle;
            icolIndex++;
        }
        ICellStyle cellStyle = workbook.CreateCellStyle();
        //为避免日期格式被Excel自动替换,所以设定 format 为 『@』 表示一率当成text來看
        cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("@");
        cellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
        cellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
        cellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
        cellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;

        NPOI.SS.UserModel.IFont cellfont = workbook.CreateFont();
        cellfont.Boldweight = (short)FontBoldWeight.Normal;
        cellStyle.SetFont(cellfont);
        //建立内容行
        int iRowIndex = 1;
        int iCellIndex = 0;
        foreach (DataRow Rowitem in dt.Rows)
        {
            IRow DataRow = sheet.CreateRow(iRowIndex);
            foreach (DataColumn Colitem in dt.Columns)
            {
                ICell cell = DataRow.CreateCell(iCellIndex);
                cell.SetCellValue(Rowitem[Colitem].ToString());
                cell.CellStyle = cellStyle;
                iCellIndex++;
            }
            iCellIndex = 0;
            iRowIndex++;
        }
        //自适应列宽度
        for (int i = 0; i < icolIndex; i++)
        {
            sheet.AutoSizeColumn(i);
        }
        //写Excel
        FileStream file = new FileStream(strExcelFileName, FileMode.OpenOrCreate);
        workbook.Write(file);
        file.Flush();
        file.Close();
        // MessageBox.Show(m_Common_ResourceManager.GetString("Export_to_excel_successfully"), m_Common_ResourceManager.GetString("Information"), MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    catch (Exception ex)
    {
        // ILog log = LogManager.GetLogger("Exception Log");
        //   log.Error(ex.Message + Environment.NewLine + ex.StackTrace);
        //记录AuditTrail
        //   CCFS.Framework.BLL.AuditTrailBLL.LogAuditTrail(ex);
        //  MessageBox.Show(m_Common_ResourceManager.GetString("Export_to_excel_failed"), m_Common_ResourceManager.GetString("Information"), MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    finally {   }
}

调用代码

var files= Directory.GetFiles(path);
StringBuilder sb = new StringBuilder();
DataTable tb = new DataTable();
tb.Columns.Add(new DataColumn("Start"));
tb.Columns.Add(new DataColumn("End"));
tb.Columns.Add(new DataColumn("Duration"));
tb.Columns.Add(new DataColumn("IsOk"));
tb.Columns.Add(new DataColumn("Data"));
foreach (var file in files)
{
    var lines = File.ReadAllLines(file);
    foreach (var line in lines)
    {
        if (line.Contains("[INFO]"))
        {
            var dr = tb.NewRow();
            var json = line.Substring(line.IndexOf("[INFO]")+9);
            var obj = JsonConvert.DeserializeObject<ResultInfo>(json);
            dr["Start"] = obj.Start;
            dr["End"] = obj.End;
            dr["Duration"] = obj.Duration;
            dr["IsOk"] = obj.IsOk;
            dr["Data"] =obj.Data;
            tb.Rows.Add(dr);
        }                
    }                   
}

GridToExcelByNPOI(tb, @"C:\Users\heyang\Desktop\IRisk\1.xls");

written by ocean \\ tags: ,