2011-05-07 125 views
3

首先,我是一名軟件開發公司自動化團隊的實習生,所以我幫助開發了我們日常構建的自動化測試程序。以編程方式更新excel文檔

我的生產線經理已經生成了一個excel文檔,它將用於呈現我們測試環境的結果。我們的測試在Hyper-V服務器上的虛擬PC上運行。

我希望能夠以更新的每個測試環境中的測試結果這個excel文件,但我不知道我應該如何去這樣做。

每個虛擬PC的運行的自動化程序(C#.NET 4.0),目前副本的測試日誌文件和結果文件到我們的構建機器,這是每個人都可以訪問的共享文件夾。

所以我想自動化程序來運行它的測試,那麼當它已經完成,我希望它寫入表測試結果的Excel文件內。有沒有人有任何程序修改Excel文檔的經驗?我還應該注意到,excel文檔將存儲在遠程虛擬PC上的共享文件夾中(可從測試環境訪問)

該表將包含構建名稱/日期,環境詳細信息,測試類型和測試結果等

我已經收集這些信息,並在HTML文件中提出了 - 但對於每一個測試環境的獨立的HTML文件。這樣做的目的是讓結果全部在一個地方(Excel文檔將以圖表和圖表的形式呈現數據)。

所以真的,所有我需要知道的是如何寫入表從.NET程序的Excel文件內。這樣做似乎有不同的方式(正如我在網上研究它時發現的那樣),所以我想問問stackoverflow,看看誰知道這樣做的最佳方式)。

+0

如果它是在共享位置,如果該文件將被打開別人什麼,你嘗試做插入它的東西?如果有更好的解決方案,Excel不是很好......我建議您使用MS Access,創建結果表格,通過ADO使用MS Access數據庫的C#很容易在互聯網上廣爲人知。至於結果 - 您可以在Excel中用少量點擊查詢來連接到Access並獲取所需的所有數據。 – mj82 2011-05-07 20:01:19

+1

@user:請不要在您的標題中加入「(C#.NET)」。只需將這些信息留在標籤中。 – 2011-05-07 20:37:37

+0

@ mj82,該文件僅爲需要它的人員提供寫入權限,包括寫入自動化程序的用戶。如果已經以只讀模式訪問Excel文件,它仍然可以寫入。 – 2013-09-07 10:08:54

回答

5

我用過得快樂EPPlus http://epplus.codeplex.com/解析,編輯和創建XLSX文件。

這個問題已經幫了我:Create Excel (.XLS and .XLSX) file from C#

+1

我最終在自動化程序中使用了EPPPlus庫,並且工作得非常好。這是非常容易使用和設置 - 這正是我需要的。我遇到的唯一問題是格式化單元格對我來說似乎不起作用,但我通過在電子表格的單元格上設置條件格式來解決此問題。 謝謝你,我會推薦這個庫給其他人,因爲它是最容易實現的。 – 2011-05-18 13:26:53

1

看一看this

希望得到這個幫助。

2

確實有很多方法。您可以使用OLEDB,也可以使用互操作(請參閱get_Range()ListObjects["table_name"].DataBodyRange)。

當我被迫創建基於模板的Excel文件時,我使用了XML映射 - 它非常方便使用。將xsd綁定到工作簿後,只需將xml加載到工作簿中,Excel就會將數據放置到正確的單元格中。 (如果你需要一個例子,只是發表評論,我會更新它的答案。)

但我個人與mj82同意。如果你可以避免寫入Excel文件 - 避免它。您可以將表(2003年的「列表」)綁定到某個外部數據源,並將該工作簿設置爲在打開時自動更新。如果在您的環境中可能會是最好的解決方案。

UPDATE: 使用XML地圖數據推到一個Excel工作簿,請按照下面的步驟

創建一個XML架構(XSD文件)。例如:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema id="BILLSTRINGS" targetNamespace="http://tempuri.org/BILLSTRINGS.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/BILLSTRINGS.xsd" xmlns:mstns="http://tempuri.org/BILLSTRINGS.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="BILLSTRINGS"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="STRINGS" maxOccurs="unbounded"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="ID_GOOD" type="xs:string" /> 
          <xs:element name="NAME_GOOD" type="xs:string" /> 
          <xs:element name="Quantity" type="xs:string" /> 
          <xs:element name="Price" type="xs:string" /> 
         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

打開工作簿,如在ms help描述添加XSD作爲地圖和地圖細胞元素。

然後在你的代碼中: 用xml數據創建一個字符串。 (我用的類型數據集,所以我剛剛打電話的getXML。) 打開工作簿和數據推到Excel:

using OExcel = Microsoft.Office.Interop.Excel; 
//... 
OExcel.Application app = new OExcel.ApplicationClass(); 
OExcel.Workbook wb = app.Workbooks.Open(filepath, false, false, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
wb.XmlMaps["MAPNAME"].ImportXml(string_with_xml); 

而這一切。希望這可以幫助。

+0

這聽起來像它可能是最簡單的選擇!如果你能給我提供一個很棒的例子。感謝您的幫助,非常感謝。 – 2011-05-07 22:23:41

+0

我用一個使用xml地圖的例子更新了答案,很享受。 – Dmitry 2011-05-08 09:00:23

+0

優秀!謝謝.. – nawfal 2011-10-11 04:06:47