2017-04-25 28 views
2

我必須在我的應用程序中填寫excel文件,打開,寫入和關閉。c#預編譯大型數組或其他解決方案以嵌入可執行文件中的大數據

問題是該文件包含很多格式和宏(是一個公司模板),我意識到這將是非常難以重新生成從C#和最重要的維護。

所以,我打開Excel模板用16進制軟件,把所有的字節數組這樣

namespace myapp 
{ 

    public static class ReviewTemplate // exported with HXD 
    { 
     public static string name = "AS-04522-EN"; 
     public static byte[] rawData = { 
    0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x3E, 0x00, 0x03, 0x00, 0xFE, 0xFF, 0x09, 0x00, 0x06, 0x00, 0x00, 0x00, 
... 
... 
... 
} 
} 

然後,從C#這樣

File.WriteAllBytes(ReviewTemplate.name + DateTime.Now.ToString("_dd_MM_yyyy_HH_mm_ss") + ".xls", ReviewTemplate.rawData); 

它的工作原理奇妙的不同之處在於所有的數組文件生成( * .cs)有15MB,當我在C#中雙擊重構或其他東西時,.NET會掛幾分鐘。

所以最大的問題是,我怎麼預編譯這個array.cs文件,所以.NET使用它?也許把所有的一些DLL?在C中我使用* .obj文件。

EDITED

更清楚,以後我生成所需的Excel(已經無論如何2.5MB)我使用互操作打開,寫然後關閉。

是否可以嵌入所有這些數據並以某種方式寫入內存,然後最終保存爲磁盤上的excel文件?

感謝,

+2

的IDE是穿孔 - 調諧爲種代碼,人類寫。他們不寫這樣的代碼。努力不足,無法維持。使用項目>屬性>資源。 –

+0

我會盡力的,謝謝。 – orfruit

回答

4

如果你希望模板是您的.exe/DLL內,.xls的添加到您的C#項目,右擊,屬性,設置生成操作爲「嵌入的資源」。

當您需要填寫它時,請致電Assembly.GetManifestResourceStream打開該嵌入資源的流,然後使用CopyTo而不是WriteAllBytes。

更新:例子(未測試的)

Stream source = Assembly.GetExecutingAssembly().GetManifestResourceStream(...); 
string destName = "AS-04522-EN" + DateTime.Now.ToString("_dd_MM_yyyy_HH_mm_ss") + ".xls"; 
using(Stream dest = File.Create(destName)) 
    source.CopyTo(dest); 
+0

我不確定我是否理解... 1.作爲資源(blob)嵌入並通過打開流來使用它的字節2.嵌入爲資源(blob)並直接從內存中轉換爲excel文件..這是可能的(我已經編輯了這個問題)? – orfruit

+0

我會盡力,謝謝。 – orfruit

+0

看到我的更新以及 – Soonts

相關問題