2012-02-18 102 views
3

我正在爲我的女朋友編寫一個評分程序,並且我試圖將數據輸出到我嵌入到程序中的excel文件中。我現在寫入一個空白的excel文件,但想使用預製的excel文件,並將數據導出到適當的單元格。我無法弄清楚如何讓程序在資源文件夾中使用xls文件,而不是製作空白的excel文件。這是迄今爲止保存的代碼。我正在使用C#2008快速版。c#使用嵌入式資源的excel文件

感謝

我rescource參考是:Properties.Resources.gradesheet

Excel.Application xlApp; 
     Excel.Workbook xlWorkBook;    
     Excel.Worksheet xlWorkSheet; 

     object misValue = System.Reflection.Missing.Value; 


     xlApp = new Excel.ApplicationClass(); 
     xlWorkBook = xlApp.Workbooks.Add(misValue); 

     xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 
     //add data to excel 
     xlWorkSheet.Cells[1, 1] = firstName; 
     xlWorkSheet.Cells[2, 1] = lastName; 




     xlWorkBook.Close(true, misValue, misValue); 
     xlApp.Quit(); 

     releaseObject(xlWorkSheet); 
     releaseObject(xlWorkBook); 
     releaseObject(xlApp); 

回答

2

您將需要從資源採取的Excel文件,並關閉其保存到一個文件中。然後,你可以做一個開放的工作簿:

xlApp.Workbooks.Open(fileName); 
+0

感謝您的答覆,所以絕對沒有辦法告訴C#中使用Excel文件在我的資源作爲一種模板,而不先保存文件使用? – Boundinashes6 2012-02-18 23:03:47

+1

不,excel適用於文件,所以它需要一個基本文件開始。您唯一的選擇是使用Excel自動化以編程方式創建文件中的所有內容。並不困難,但將文件保存到臨時位置並從那裏開始工作可能更容易。 – 2012-02-18 23:20:36

1

正如約翰·克爾納說的Excel工作的文件,所以你需要你的Excel文件被保存先申請。

但是,如果您可以使用.XLSX而不是.XLS,那麼最好使用EPPlus而不是Interop來創建Excel文件。這很容易,並沒有Interop所做的所有問題。

基於this link,取決於您想要如何處理Excel文件以及您將如何使用它,該場景會有所不同。您可以:

  • 將流直接傳遞給支持流作爲參數的對象。例如,Excel Package Plus支持直接從任何流讀取excel文件,並可將該對象加載到內存中。然後,您可以操作該對象並將其寫入調用Save方法的文件,傳遞一個filestreamfilename
  • 通過使用正確的目標文件名(使用File.OpenWrite)創建一個可寫的Filestream對象,然後調用yourManifestResourceStream.CopyTo(yourFileStream),將流保存到(臨時)文件。然後,您可以將filename傳遞給另一個進程(如Excel)並從文件系統中打開它。
0

首先,你應該使用這個功能,讓你的資源文件的流:

public static Stream GetResourceFileStream(string fileName) 
      { 
       Assembly currentAssembly = Assembly.GetExecutingAssembly(); 
       // Get all embedded resources 
       string[] arrResources = currentAssembly.GetManifestResourceNames(); 

       foreach (string resourceName in arrResources) 
       { 
        if (resourceName.Contains(fileName)) 
        { 
         return currentAssembly.GetManifestResourceStream(resourceName); 
        } 
       } 

       return null; 
      } 

然後你就可以用流工作,或者你可以將流保存到文件:How do I save a stream to a file

0

您可以創建Excel模板文件(.xlt),然後根據該模板打開新的.xls文件。問候,AB

2

這應該會幫助你。 (在.NET 4.5中測試)。

public void openExcelTemplateFromResources() 
{ 
    string tempPath = System.IO.Path.GetTempFileName(); 

    System.IO.File.WriteAllBytes(tempPath, Properties.Resources.excelResource); 

    Excel.Application excelApplication = new Excel.Application(); 
    Excel._Workbook excelWorkbook; 
    excelWorkbook = excelApplication.Workbooks.Open(tempPath) 

    excelApplication.Visible = true; // at this point its up to the user to save the file 
}