将CSV转换为Excel Windows Phone 8

3
使用Windows Phone 8,我需要能够使用C#在Excel中打开CSV文件。现在市场上有一个名为Excel Extensions的应用程序,可以将CSV文件本地转换为Excel格式。
我尝试过使用Open Office XML转换CSV文件,但没有成功。并且我希望在本地进行转换,不使用Web服务。
有人知道如何在Windows Phone 8平台上将CSV文件转换为Excel吗?
1个回答

5

理论

你有两个不同的选择:(1)在WP8客户端上完成大部分工作(2)或在远程服务器上完成大部分工作。

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

对于不使用远程服务器的选项#1:读取CSV文件,将CSV数据复制到XLSX文件中,将XLSX保存到IsoStore并启动excel打开该文件。我曾经在如何为Windows Phone 8创建、写入和读取Excel文件中写过这个主题。

你需要做的一件事情是在纯WP7 C#中编写XLSX文件,这将需要相当多的工作量。你要么需要转换第三方 来支持WP7/WP8,要么需要将简单的端到端C#代码示例转换为WP7/WP8。两者都不简单。转换ClosedXML是可能的,但DocumentFormat.OpenXml对WPF的WindowsCore的依赖是个问题。另一种选择是编写自己的OpenXML C#实现,就像Chris Klug 在Silverlight上为Word OpenXML所做的那样,后来也移植到了WP7。关键是要利用OpenXML规范。


代码示例

例如,看一下 Chris Klug 的Silverlight Excel OpenXML文章,可以使用他的Ag.OpenXMLOpenXML.Silverlight.Spreadsheet代码将它们移植到 WP8,然后简单地调用它们。我就是这样做的。以下是获取实验性源代码并开始的方法:

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

2) 在csproj中添加引用,或者从“OpenXML.Silverlight.Spreadsheet.WP8\Bin\Debug”中添加对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) 运行此代码片段时,我们可以看到以下警告弹出窗口,然后是Excel电子表格。请随意改进我的仓促Silverlight -> WP8端口,并删除该警告。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接