3

Windows Phone 8では、C#を使用してExcelでCSVファイルを開くことができる必要があります。彼らは現在ExcelExtensionsと呼ばれている市場に出回っているアプリで、csvファイルをローカルに変換します。

オープンオフィスXMLを使用してCSVファイルを変換するのに疲れましたが、うまくいきませんでした。そして私はそれをローカルでやりたいので、Webサービスはありません。

Windows Phone 8プラットフォームでCSVファイルをExcelに変換する方法を知っている人はいますか?

4

1 に答える 1

5

仮説

(1) ほとんどの作業を WP8 クライアントで行う (2) ほとんどの作業をリモート サーバーで行う、という 2 つの異なるオプションがあります。

リモート サーバーを使用するオプション 2 の場合: CSV ファイルを取り込み、CSV を解析してその論理 2D テーブル構造を見つけ、ClosedXMLを使用して新しい XLSX ファイルを保存し、それをクライアントに返す WCF サービスを公開します。このオプションは最も簡単ですが、ネットワーク接続とホストされたサーバーも必要です。

オプション #1 のリモート サーバーを使用しない場合: CSV ファイルを読み取り、CSV データを XLSX ファイルにコピーし、XLSX を IsoStore に保存し、そのファイルで Excel を起動します。このトピックについて過去に書いたことがあります @ How can we create, write and read a Excel file for Windows Phone 8

非常に多くの作業を行う必要があることの 1 つは、純粋な WP7 C# で XLSX ファイルを作成することです。XLSX を記述して WP7/WP8 をサポートするサード パーティ ライブラリを変換するか、単純なエンド ツー エンドの C# コード サンプルを WP7/WP8 に変換する必要があります。どちらも単純ではありません。ClosedXML の変換は可能ですが、DocumentFormat.OpenXml の WPF の WindowsCore への依存が問題です。もう 1 つのオプションは、Chris Klugがここで Silverlight 上の Word OpenXML に対して行い、後にWP7 に移植されたように、独自の OpenXML C# 実装を作成することです。重要なのは、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」からの 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) このコード スニペットを実行すると、次の警告ポップアップが表示され、次に Excel スプレッドシートが表示されます。私のせっかちな Silverlight --> WP8 ポートを自由に改善して、その警告を削除してください。

作成したばかりのファイルで Excel WP8 を開く WP8 Excel での破損ファイルの警告

于 2012-12-31T00:21:19.127 に答える