And*_*tia 3 excel winrt-xaml windows-phone-8
使用Windows Phone 8我需要能够使用C#在Excel中打开CSV文件.它们是市场上现在称为Excel Extensions的应用程序,它可以在本地转换csv文件.
我已经厌倦了使用开放式办公室XML转换CSV文件,但这不起作用.我想在本地做,所以没有网络服务.
任何人都知道如何在Windows Phone 8平台上将CSV文件转换为Excel?
理论
您有两个不同的选项:(1)完成WP8客户端上的大部分工作(2)或在远程服务器上完成大部分工作.
对于使用远程服务器的选项#2:公开接收CSV文件的WCF服务,解析CSV以查找其逻辑2D表结构,使用ClosedXML保存新的XLSX文件并将其返回给客户端.此选项最直接,但也需要网络连接和托管服务器.
对于不使用远程服务器的选项#1:读取CSV文件,将CSV数据复制到XLSX文件,将XLSX保存到IsoStore并使用该文件启动excel.我以前写过关于这个主题的文章@ 我们如何为Windows Phone 8创建,编写和读取excel文件
你需要做的很多工作就是在纯WP7 C#中编写一个XLSX文件.您要么必须转换编写XLSX的第三方 库以支持WP7/WP8,要么将简单的端到端C#代码示例转换为WP7/WP8.两者都不简单.转换ClosedXML是可能的,但DocumentFormat.OpenXml对WPF的WindowsCore的依赖是一个问题.另一种方法是写自己的OpenXML C#实现像克里斯·格在这里做了Silverlight的Word中的OpenXML,是移植到WP7以后.关键是使用OpenXML规范为您带来优势.
实时代码示例
例如,查看Chris Klug的Silverlight Excel OpenXML文章,可以将他的代码用于Ag.OpenXML和OpenXML.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"));
}
}
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
5)运行此代码段时,我们可以看到以下警告弹出窗口,然后是excel电子表格.随意改进我的仓促Silverlight - > WP8端口并删除该警告.

| 归档时间: |
|
| 查看次数: |
3176 次 |
| 最近记录: |