zoukankan      html  css  js  c++  java
  • .net Create Excel 2007 file with open xml

    Open XML 是从office 2007 开始被支持的, 用Open xml可以不用Office dcom创建标准office 文档, Office Dcom进程释放不掉, 实在太烦人了, 而且资源消耗大. 用Open xml可以直接生成office 文档, 不过现在文档资料比较少, 且方法不是很可取, 包括msdn上的一些文档, 创建office 文档都是用拼字符串的方法来做的, 个人感觉不符合C#编码习惯, 不过也情有可原, 这文档大多是在open xml sdk1.0 年代写的, 先Open xml SDK2.0出来了, 经过一阵专研, 终于写出了一个excel 文件,  不过可惜, boss 考虑到风险问题, 让我继续要dcom创建, 因此仅仅研究到创建excel 文件, 并往cell里写text. 不过这种方法对于asp.net 动态生成 excel 下载, 还是很有用途的, boss 要求的下载的excel 要求带chart的, 就是根据数据生成chart在下载的excel文件中, 因此那种直接response  girdview的方法不能满足要求.

    闲话少叙, 看代码.

    • 用open xml 需要首先安装 open xml sdk,  并且在.net 3.0环境, 因为它需要用LINQ.
    • 添加DocumentFormat.OpenXml 引用
    • 使用名称空间:
    • using System.IO.Packaging;
      using DocumentFormat.OpenXml;
      using DocumentFormat.OpenXml.Packaging;
      using DocumentFormat.OpenXml.Spreadsheet;

    // 创建流, 如果用在asp.net下载, 可以用memorystream

    FileStream fs = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite);

    //创建spreadsheetDocument

    using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Create(fs, SpreadsheetDocumentType.Workbook))
    {

                  WorkbookPart workbookPart = spreadSheet.AddWorkbookPart();
                  workbookPart.Workbook = new Workbook();
                  workbookPart.Workbook.AppendChild<Sheets>(new Sheets());

                  //ShareString 不知道是做什么用, 没有找到相关文档介绍
                   SharedStringTablePart sharestringTablePart = workbookPart.AddNewPart<SharedStringTablePart>();
                   sharestringTablePart.SharedStringTable = new SharedStringTable();
                   int i = 0;
                   foreach (SharedStringItem item in sharestringTablePart.SharedStringTable.Elements<SharedStringItem>())
                   {
                      string str =  item.InnerText;
                       i++;
                   }
                   sharestringTablePart.SharedStringTable.AppendChild(new SharedStringItem(new DocumentFormat.OpenXml.Spreadsheet.Text("teasfsdfasdfxt")));
                  sharestringTablePart.SharedStringTable.Save();

                  //SharedStringTable好像不起什么作用, 没有好像还不行

                  //下边的代码是创建 sheet

                   WorksheetPart newWorksheetPart = workbookPart.AddNewPart<WorksheetPart>();
                   newWorksheetPart.Worksheet = new Worksheet(new SheetData());
                   newWorksheetPart.Worksheet.Save();
                   Sheets sheets = workbookPart.Workbook.GetFirstChild<Sheets>();
                   string relationshipId = workbookPart.GetIdOfPart(newWorksheetPart);

                   // Get a unique ID for the new sheet.
                   uint sheetId = 1;

                   string sheetName = "Sheet" + sheetId;

                   // Append the new worksheet and associate it with the workbook.
                   Sheet sheet = new Sheet() { Id = relationshipId, SheetId = sheetId, Name = sheetName };
                   sheets.Append(sheet);

                  //下边的代码是往sheet里写东西

                   SheetData sheetData = newWorksheetPart.Worksheet.GetFirstChild<SheetData>();
                   Row row = new Row(){RowIndex = 2};
                   sheetData.Append(row);
                   Cell newCell = new Cell() { CellReference = "B2" };
                   newCell.DataType = new EnumValue<CellValues>(CellValues.String);
                   row.InsertAt<Cell>(newCell, 0);
                   newCell.CellValue = new CellValue("1");

                   newCell.CellValue.Text = "testt";
                   //这个保存很重要
                   newWorksheetPart.Worksheet.Save();
                   workbookPart.Workbook.Save();
                  spreadSheet.Close();
                  fs.Close();
              }

    在创建的过程中一点错误就会导致创建的excel不能被打开. 另外有个外国公司已经封装了这个open xml, 很好用,很easy, 不过要钱. 网址: http://www.spreadsheetgear.com/ 

    顺便发上我写用 exce Dcom 生成 excel

    Code
  • 相关阅读:
    关于ajax无刷新分页 vue
    ajax无刷新分页
    querylist采集 爬虫
    201703-1 分蛋糕 Java
    201612-2 工资计算 Java
    201612-1 中间数 Java
    201609-2 火车购票 Java
    201609-1 最大波动 Java
    201604-2 俄罗斯方块 Java
    201604-1 折点计数 Java
  • 原文地址:https://www.cnblogs.com/skyfei/p/1316560.html
Copyright © 2011-2022 走看看