2015-12-25 50 views
2

我在我的項目(Silverlight方)的文件夾(Common)中有一個xlsx文件(New.xlsx)。如何從silverlight文件夾打開文件

我想在按鈕單擊事件上訪問該文件路徑並且想要打開該文件。

我用以下路徑:

string path = @"/Common/New.xlsx"; 
string path1 = excel.Workbooks.Open(path); 
excel.Visible = true; 

但它不工作,我不能打開該文件。

如何在Silverlight中使用文件路徑訪問文件?

+0

從描述中可以得知,該文件是嵌入爲內容還是作爲資源嵌入。 – Nkosi

+0

我已設置爲內容 – Hitesh

+0

從我的閱讀中,我會建議將文件存儲在服務器端,並讓客戶端從服務器上拉出文件。 – Nkosi

回答

2

您有幾個選項可供您訪問相關文件。

  • 您可以獲取文件的內容作爲流,然後要求用戶通過SaveFileDialog類保存該文件。用戶然後必須選擇他們想要保存文件的位置,然後手動打開它。
public static byte[] GetBytesFromStream(Stream input){ 
    byte[] buffer = new byte[16*1024]; 
    using (MemoryStream ms = new MemoryStream()){ 
     int read; 
     while ((read = input.Read(buffer, 0, buffer.Length)) > 0){ 
      ms.Write(buffer, 0, read); 
     } 
     return ms.ToArray(); 
    } 
} 

public void OnButtonClick(){ 
    var templateUri = new Uri("/Common/New.xlsx, UriKind.Relative"); 
    var templateStream = Application.GetResourceStream(templateUri).Stream; 
    var bytes = GetBytesFromStream(templateStream); 
    var sfd = new SaveFileDialog() { 
      DefaultExt = "xlsx", 
      Filter = "Excel Files (*.xlsx)|*.xlsx|All files(*.*)|*.*", 
      FilterIndex = 1     
    }; 

    if (sfd.ShowDialog() == true) { 
     using (Stream stream = sfd.OpenFile()) { 
      stream.Write(bytes, 0, bytes.Length); 
     } 
    } 
} 
  • 您可以將文件存儲服務器端,當用戶點擊這個按鈕,你告訴瀏覽器來獲得他有問題的文件。然後瀏覽器將接管並詢問用戶是否要將文件保存到磁盤或使用已知應用程序打開。
public void OnButtonClick(){ 
    string link = "{the url/endpoint to the file on the server}"; 
    System.Windows.Browser.HtmlPage.Window.Navigate(new Uri(link), "_blank"); 
} 
  • 你可以下去了AutomationFactory路線但這需要的配置改變了很多像建議here

我認爲更好的做法是在服務器上有這樣的事情,而不是客戶端。服務器配備更好,可以處理這種處理。

2

嘗試以下方法:

var TemplateUri = new Uri("/Common/New.xlsx, UriKind.Relative"); 
var stream = Application.GetResourceStream(sheetUri).Stream; 

的文件部署witin XAP文件(這是一個壓縮文件),並且不能由所述磁盤上一個正常的文件來處理。

我不清楚你使用的是什麼Excel庫,但它應該允許你從Stream加載數據。

+0

我使用了「動態excel = AutomationFactory.CreateObject(」Excel.Application「);我想打開一個excel文件我們可以這樣做嗎 – Hitesh

+0

是的,你可以,但你的應用程序必須提高信任度 - //social.msdn.microsoft.com/Forums/silverlight/en-US/cbf4b2cc-f889-4a63-91e4-0113f9af2819/problem-with-automationfactorycreateobjectexcelapplication?forum=silverlightarchieve – Alexei

+0

我的建議是嘗試在服務器端進行Excel處理,因爲圖層允許使用標準。NET fwk(而不是Silverlight運行時),因此可以使用像ClosedXML這樣的高級庫輕鬆處理Excel文件。服務器端處理還允許更快的處理,因爲Web服務器比工作站功能強大得多。 – Alexei