zoukankan      html  css  js  c++  java
  • C#研究OpenXML之路(1-新建工作簿文件)

    一、写在开头

    一直想沉下心来研究研究OpenXML编程,可是由于公司编程项目一笔接一笔,很难静下来,所以一直是采用的COM操作Excel。现在终于得闲,特将心得历程记录下来。

    今天的第一个实例代码是来源于MSDN,关于如何创建一个空的工作簿文件。不过在正式开始堆砌代码前,首先你的配置好你的开发环境。

    1、你得安装VS2010或以上版本,去网上下吧,我不提供链接了;

    2、你得安装OpenXMLSDKV25,去网上下吧,我不提供链接了;

    二、项目准备

    接下来你就需要再VS中创建一个项目,编写代码了。但是你必须注意这么几件事情:

    1、在项目中添加对DocumentFormat.OpenXml库的引用;

    2、VS2010的默认框架是4.0,如果你未修改这个设置,需要添加WindowsBase.dll的引用;如果你选择的是3.5的就不用管了,否则你会收到类似下面所示的错误;

    类型“System.IO.Packaging.Package”在未被引用的程序集中定义。必须添加对程序集“WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”的引用。

    三、静态方法CreateSpreadsheetWorkbook

    我创建的是一个WinForm的C#项目,并新添加了一个静态类OpenXMLHelper,在后续的同主题文章我会不断扩充这个OpenXMLHelper的代码,以形成常用的操作Excel的类。接下来我们将从MSDN获取的函数代码拷贝进去,注意一定要自己手动添加5-7行的using语句:

    以下代码的重点是CreateSpreadsheetWorkbook方法,它接受一个路径字符串参数,(我们可以考虑改造改方法返回创建的工作簿对象,因为没有必要创建完毕后,还要再去用代码找这个新创建的工作簿):

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using DocumentFormat.OpenXml;
     6 using DocumentFormat.OpenXml.Packaging;
     7 using DocumentFormat.OpenXml.Spreadsheet;
     8 
     9 namespace OpenXMLTest
    10 {
    11     static class OpenXMLHelper
    12     {
    13         public static void CreateSpreadsheetWorkbook(string filepath)
    14         {
    15             // Create a spreadsheet document by supplying the filepath.
    16             // By default, AutoSave = true, Editable = true, and Type = xlsx.
    17             SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(filepath, SpreadsheetDocumentType.Workbook);
    18 
    19             // Add a WorkbookPart to the document.
    20             WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart();
    21             workbookpart.Workbook = new Workbook();
    22 
    23             // Add a WorksheetPart to the WorkbookPart.
    24             WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
    25             worksheetPart.Worksheet = new Worksheet(new SheetData());
    26 
    27             // Add Sheets to the Workbook.
    28             Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());
    29 
    30             // Append a new worksheet and associate it with the workbook.
    31             Sheet sheet = new Sheet() { Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "mySheet" };
    32             sheets.Append(sheet);
    33 
    34             workbookpart.Workbook.Save();
    35 
    36             // Close the document.
    37             spreadsheetDocument.Close();
    38         }
    39     }
    40 }

    也可以参考一下来自于CodeProject网站的一段代码

     1 public static SpreadsheetDocument CreateWorkbook(string fileName) {
     2    SpreadsheetDocument spreadSheet = null;
     3    SharedStringTablePart sharedStringTablePart;
     4    WorkbookStylesPart workbookStylesPart;
     5 
     6    try {
     7       // Create the Excel workbook
     8       spreadSheet = SpreadsheetDocument.Create(fileName, SpreadsheetDocumentType.Workbook, false);
     9 
    10       // Create the parts and the corresponding objects
    11       // Workbook
    12       spreadSheet.AddWorkbookPart();
    13       spreadSheet.WorkbookPart.Workbook = new Workbook();
    14       spreadSheet.WorkbookPart.Workbook.Save();
    15 
    16       // Shared string table
    17       sharedStringTablePart = spreadSheet.WorkbookPart.AddNewPart<SharedStringTablePart>();
    18       sharedStringTablePart.SharedStringTable = new SharedStringTable();
    19       sharedStringTablePart.SharedStringTable.Save();
    20 
    21       // Sheets collection
    22       spreadSheet.WorkbookPart.Workbook.Sheets = new Sheets();
    23       spreadSheet.WorkbookPart.Workbook.Save();
    24 
    25       // Stylesheet
    26       workbookStylesPart = spreadSheet.WorkbookPart.AddNewPart<WorkbookStylesPart>();
    27       workbookStylesPart.Stylesheet = new Stylesheet();
    28       workbookStylesPart.Stylesheet.Save();
    29    } catch (System.Exception exception) {
    30       System.Windows.MessageBox.Show(exception.Message, "Excel OpenXML basics", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand);
    31    }
    32 
    33    return spreadSheet;
    34 } 
    四、调用方法

    我在窗体上添加了一个按钮控件,并未改按钮添加了相应的代码,窗体的完整代码如下:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.ComponentModel;
     4 using System.Data;
     5 using System.Drawing;
     6 using System.Linq;
     7 using System.Text;
     8 using System.Windows.Forms;
     9 
    10 namespace OpenXMLTest
    11 {
    12     public partial class Form1 : Form
    13     {
    14         public Form1()
    15         {
    16             InitializeComponent();
    17         }
    18 
    19         private void button1_Click(object sender, EventArgs e)
    20         {
    21             OpenXMLHelper.CreateSpreadsheetWorkbook(@"C:UsersAdministratorDesktopOpenXMLTestOpenXMLTest.xlsx");
    22         }
    23     }
    24 }
  • 相关阅读:
    C#多线程中lock的用法
    杭州交通违规处理地点大全
    J2me c/s结构,访问数据库
    谁将成为下一个Twitter?最新最酷的创业奇思妙想
    那些相见恨晚的 JavaScript 技巧
    Adobe Dreamweaver CS5试用点滴感受
    python百炼成钢实例008输出 9*9 乘法口诀表
    python百炼成钢实例006斐波那契数列输出最后一个和整个数列,迭代
    python百炼成钢实例007复制,浅拷贝和深拷贝
    python百炼成钢实例080猴子分桃
  • 原文地址:https://www.cnblogs.com/alexywt/p/5942277.html
Copyright © 2011-2022 走看看