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:\Users\Administrator\Desktop\OpenXMLTest\OpenXMLTest.xlsx");
22         }
23     }
24 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM