将CSV转换为Excel Windows Phone 8

与Windows Phone 8我需要能够在Excel中使用C#打开一个CSV文件。 他们是市场上现在称为Excel Extensions的应用程序,可以在本地转换csv文件。

我已经厌倦了使用开放式办公室XML转换CSV文件,但没有奏效。 我想在本地做,所以没有networking服务。

任何人都知道我可以在Windows Phone 8平台上的CSV文件转换为Excel?

理论

您有两个截然不同的select:(1)在WP8客户机上执行大部分工作(2)或在远程服务器上执行大部分工作。

对于使用远程服务器的选项#2 :公开一个接收CSV文件的WCF服务,parsingCSV以查找其逻辑2D表结构,使用ClosedXML保存新的XLSX文件并将其返回给客户端。 这个选项是最直接的,但也需要networking连接和托pipe服务器。

对于不使用远程服务器的选项#1 :读取CSV文件,将CSV数据复制到XLSX文件中, 将XLSX保存到IsoStore中,然后用该文件启动excel 。 我以前写过关于这个主题的问题@ 我们如何创build,编写和读取Windows Phone 8的Excel文件

有一件事你必须做很多工作,就是用纯WP7 C#编写一个XLSX文件 。 您将不得不转换编写XLSX的第三方 库来支持WP7 / WP8,或将简单的端到端C#代码示例转换为WP7 / WP8。 两者都不简单。 转换ClosedXML是可能的,但DocumentFormat.OpenXml对WPF的WindowsCore的依赖是一个问题。 另一个select是像Chris Klug在Silverlight上为Word OpenXML 所做的那样编写自己的OpenXML C#实现,稍后将移植到WP7 。 关键在于使用OpenXML规范。


实时代码示例

例如,查看Chris Klug的Silverlight Excel OpenXML文章,可以将他的代码放在Ag.OpenXMLOpenXML.Silverlight.Spreadsheet中移植到WP8,然后简单地调用它们。 我做到了。 以下是如何获得实验性源代码并开始使用:

1)下载并解压缩@ http://JustinAngel.net/Storage/OpenXML.Silverlight.Spreadsheet.WP8.zip

2)从“OpenXML.Silverlight.Spreadsheet.WP8 \ Bin \ Debug”中添加一个对csproj的引用,或者对DLL的OpenXML.Silverlight.Spreadsheet.WP8.dll&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)用Chris的示例文档调用上面的代码片段:

 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)运行这个代码片段时,我们可以看到下面的警告popup窗口,然后是Excel电子表格。 随意改进我的草稿Silverlight – > WP8端口,并删除该警告。

Excel WP8打开我们刚刚创建的文件WP8 Excel上的文件损坏警告