Xml文档数据提取到Excel表中

   近期,财务一位同事,吐槽:《某XX开票软件》导出数据文档只有Xml格式,竟然没有Excel文档,工作起来非常不方便,希望我想想办法。上图:

需求分析:Xml数据----> 提取到DataTable中---->导入到Excel中  ,难度不大,开始干起。

1、主程序窗口

   

2、解决方案结构

3、实现效果

4、生成Excel代码

public class ExcelHelper
    {
        public static void SaveToExcel(MemoryStream ms, string filePath)
        {
            using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
            {
                byte[] data = ms.ToArray();
                fs.Write(data, 0, data.Length);
                fs.Flush();
                data = null;
            }
        }
        public static MemoryStream DataTableToStream(DataTable dt)
        {
            HSSFWorkbook wk = new HSSFWorkbook();
            ISheet sheet = null;

            string sheetName = "税务编码";
            //if (!string.IsNullOrEmpty(dt.TableName))
            //{
            //    sheetName = dt.TableName;
            //}
            sheet = wk.CreateSheet(sheetName);
            //列头及样式
            IRow headerRow = sheet.CreateRow(0);
            ICellStyle headStyle = wk.CreateCellStyle();
            headStyle.Alignment = HorizontalAlignment.Center;

            IFont font = wk.CreateFont();
            font.FontHeightInPoints = 10;
            font.Boldweight = 700;
            font.FontName = "微雅黑体";
            headStyle.SetFont(font);

            foreach (DataColumn column in dt.Columns)  //column共属性
            {
                headerRow.CreateCell(column.Ordinal).SetCellValue(column.Caption); //clomun.ColumnName
                headerRow.GetCell(column.Ordinal).CellStyle = headStyle;  //体会
            }
            //第0行是标题列,第1行开始填充数据
            int rowIndex = 1;
            foreach (DataRow row in dt.Rows)
            {
                //HSSFRow dataRow = (HSSFRow)sheet.CreateRow(rowIndex); //也可以这样写  
               
                IRow dataRow = sheet.CreateRow(rowIndex);//新建第1行
                foreach (DataColumn column in dt.Columns)
                {
                    dataRow.CreateCell(column.Ordinal).SetCellValue(row[column].ToString());//填充数据
                }
                rowIndex++;
            }
            using (MemoryStream ms = new MemoryStream())
            {
                wk.Write(ms);
                ms.Flush();
                return ms;
            }  
        }
    }
View Code

5、总结:利用IT技术,解决实际工作中问题,提高工作效率,是件有意义,快乐事情,催我继续前行!Mark.

 

posted @ 2018-02-08 11:17  森林长  阅读(505)  评论(0编辑  收藏  举报