2012-12-30 105 views
3

with windows phone 8我需要能夠使用C#在Excel中打開CSV文件。他們是市場上現在稱爲Excel Extensions的應用程序,可以在本地轉換csv文件。將CSV轉換爲Excel Windows Phone 8

我已經厭倦了使用開放式辦公室XML轉換CSV文件,但沒有奏效。我想在本地做這個,所以沒有網絡服務。

任何人都知道如何將CSV文件轉換爲Windows Phone 8平臺上的Excel?

回答

5

理論

你有兩種不同的選擇:(1)做的大部分工作的WP8客戶端(2)或做大部分工作的遠程服務器上。

對於選擇使用遠程服務器的#2:揭露一個WCF服務,它在CSV文件,解析CSV找到它的邏輯二維表結構,使用ClosedXML保存新XLSX文件,並返回到客戶端。此選項最直接,但也需要網絡連接和託管服務器。

對於不使用遠程服務器的選項#1:讀CSV文件,CSV數據複製到一個XLSX文件,save the XLSX into IsoStore and launch excel with that file。我寫這個話題在過去@How can we create, write and read an excel file for Windows Phone 8

有一件事你必須做的相當大量的工作是寫在純WP7 C#一個XLSX文件。您必須將要編寫XLSX的3rd partylibraries轉換爲支持WP7/WP8,或將simple end-to-end C# code samples轉換爲WP7/WP8。兩者都不簡單。轉換ClosedXML是可能的,但DocumentFormat.OpenXml對WPF的WindowsCore的依賴是一個問題。另一種選擇是在Silverlight上爲Word OpenXML編寫自己的OpenXML C#實現,如Chris Klug did here,稍後將爲ported to WP7。關鍵是使用OpenXML規範爲您提供優勢。


LIVE代碼示例

例如,看着克里斯·格公司Silverlight Excel OpenXML文章有可能把他的代碼Ag.OpenXMLOpenXML.Silverlight.Spreadsheet端口那些WP8,然後簡單地調用它們。我做到了。下面是如何獲取的實驗源代碼,並開始:

1)下載並解壓@http://JustinAngel.net/Storage/OpenXML.Silverlight.Spreadsheet.WP8.zip

2)添加一個引用到的csproj,或將DLL的OpenXML.Silverlight.Spreadsheet.WP8.dll &來自「OpenXML.Silverlight.Spreadsheet.WP8 \ Bin \ Debug」的SharpZipLib.dll。

3)添加下面的代碼片段,將SpreedsheetDocument文件保存到應用程序的WP8 IsoStore中,然後使用WP8 app2app文件關聯在Word中啓動它。

private async void SaveXlsxToIsoStoreAndLaunchInExcel(SpreadsheetDocument doc) 
{ 
    using (var isoStore = IsolatedStorageFile.GetUserStoreForApplication()) 
    { 
     if (isoStore.FileExists("myFile.xlsx")) 
      isoStore.DeleteFile("myFile.xlsx"); 

     using (var s = isoStore.CreateFile("myFile.xlsx")) 
     using (IStreamProvider storage = new ZipStreamProvider(s)) 
     { 
      doc.Save(storage); 
     } 

     Launcher.LaunchFileAsync(
      await ApplicationData.Current.LocalFolder.GetFileAsync("myFile.xlsx")); 
    } 
} 

4)調用上面的代碼片段與克里斯的樣本文件:

private async void MainPage_Loaded(object sender, RoutedEventArgs e) 
{ 
    SpreadsheetDocument doc = new SpreadsheetDocument(); 
    doc.ApplicationName = "SilverSpreadsheet"; 
    doc.Creator = "Chris Klug"; 
    doc.Company = "Intergen"; 

    SharedStringDefinition str1 = doc.Workbook.SharedStrings.AddString("Column 1"); 
    SharedStringDefinition str2 = doc.Workbook.SharedStrings.AddString("Column 2"); 
    SharedStringDefinition str3 = doc.Workbook.SharedStrings.AddString("Column 3"); 

    doc.Workbook.Sheets[0].Sheet.Rows[0].Cells[0].SetValue(str1); 
    doc.Workbook.Sheets[0].Sheet.Rows[0].Cells[1].SetValue(str2); 
    doc.Workbook.Sheets[0].Sheet.Rows[0].Cells[2].SetValue(str3); 

    doc.Workbook.Sheets[0].Sheet.Rows[1].Cells[0].SetValue("Value 1"); 
    doc.Workbook.Sheets[0].Sheet.Rows[1].Cells[1].SetValue(1); 
    doc.Workbook.Sheets[0].Sheet.Rows[1].Cells[2].SetValue(1001); 

    doc.Workbook.Sheets[0].Sheet.Rows[2].Cells[0].SetValue("Value 2"); 
    doc.Workbook.Sheets[0].Sheet.Rows[2].Cells[1].SetValue(2); 
    doc.Workbook.Sheets[0].Sheet.Rows[2].Cells[2].SetValue(1002); 

    doc.Workbook.Sheets[0].Sheet.Rows[3].Cells[0].SetValue("Value 3"); 
    doc.Workbook.Sheets[0].Sheet.Rows[3].Cells[1].SetValue(3); 
    doc.Workbook.Sheets[0].Sheet.Rows[3].Cells[2].SetValue(1003); 

    doc.Workbook.Sheets[0].Sheet.Rows[4].Cells[0].SetValue("Value 4"); 
    doc.Workbook.Sheets[0].Sheet.Rows[4].Cells[1].SetValue(4); 
    doc.Workbook.Sheets[0].Sheet.Rows[4].Cells[2].SetValue(1004); 

    TablePart table = doc.Workbook.Sheets[0].Sheet.AddTable("My Table", "My Table", doc.Workbook.Sheets[0].Sheet.Rows[0].Cells[0], doc.Workbook.Sheets[0].Sheet.Rows[4].Cells[2]); 
    table.TableColumns[0].Name = str1.String; 
    table.TableColumns[1].Name = str2.String; 
    table.TableColumns[2].Name = str3.String; 

    doc.Workbook.Sheets[0].Sheet.AddColumnSizeDefinition(0, 2, 20); 

    doc.Workbook.Sheets[0].Sheet.Rows[5].Cells[1].SetValue("Sum:"); 
    doc.Workbook.Sheets[0].Sheet.Rows[5].Cells[2].Formula = "SUM(" + doc.Workbook.Sheets[0].Sheet.Rows[1].Cells[2].CellName + ":" + doc.Workbook.Sheets[0].Sheet.Rows[4].Cells[2].CellName + ")"; 


    SaveXlsxToIsoStoreAndLaunchInExcel(doc); 
} 

5)當運行這個代碼片段,我們可以看到如下的警告彈出,然後Excel電子表格。隨時改進我的草稿Silverlight - > WP8端口並刪除該警告。

Excel WP8 open with the file we just created Corrupt file warning on WP8 Excel