質問

データセットを xml ドキュメントに変更し、アプリケーションからデータをプログラムで開けるようにするために、xsl シートを使用して Excel xml 形式に変換しました。これに関して 2 つの問題に遭遇しました。

  1. Excel は Excel ファイルを開くためのデフォルトの Windows アプリケーションではないため、Program.Start("xmlfilename.xml") を実行すると IE が開かれ、XML ファイルはあまり読みにくくなります。

  2. ファイルの名前を .xlsx に変更すると、「これは Excel ファイルではありません。続行しますか?」という警告が表示されます。これは顧客にとって理想的なことではありません。

理想的には、Excel ファイルを開くためのデフォルトの OS 設定を変更せずに、Windows でファイルを Excel で開くことができるようにしたいと考えています。Office の相互運用性は可能ですが、このアプリケーションには少しやりすぎのように思えます。これを機能させるためのアイデアを持っている人はいますか?

ソリューションは .Net/C# ですが、クリーンなソリューションを作成するための他の可能性にもオープンです。

役に立ちましたか?

解決

Process.Start(@"C:\Program Files\Microsoft Office\Officexx\excel.exe", "yourfile.xml");

そうは言っても、メッセージボックスは引き続き表示されます。Interop を使用できると思いますが、それがどの程度うまく機能するかはわかりません。

他のヒント

XML の 2 行目に次のコードを挿入すると、Windows が Excel で開くように指示されます。

<?mso-application progid="Excel.Sheet"?>

ファイルを XML-Excel の拡張子である xlsx として保存するとどうなるでしょうか?

Sam が述べたように、ファイル拡張子は xlsx にするのがおそらく良い方法です。ただし、xml ファイルを xlsx として保存するだけではなく、さらに多くの作業が必要になります。xlsx は実際には、フォルダー内に多数の XML ファイルを含む zip ファイルです。良いサンプルコードを見つけました ここ 私は個人的に試したことはありませんが、これでいくつかの良い説明が得られるようです。

サードパーティのライブラリを接続することについて事前にお詫びします。無料ではないことは承知していますが、私は次のライブラリを使用しています。 フレックスセルスタジオ TMSソフトウェアから。データをダンプするだけではないこと (書式設定、動的クロス集計など) を実行したい場合は、非常にうまく機能します。私たちはそれを使用して週に何百ものレポートを作成しています。

FlexCel は、厳密に型指定されたデータセットを受け入れ、関係に従ってデータをグループ化でき、生成された Excel ファイルは、Crystal Reports Excel エクスポートから取得できるものよりもはるかにきれいに見えます。私は Crystal Reports と OLE オートメーションを実行しました。FlexCel は 125 EU ドルでお買い得です。

お役に立てれば。

MSDN の OpenXML - http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.workbooks.openxml(v=office.11​​).aspx

using Excel = Microsoft.Office.Interop.Excel;

string workbookPath= @"C:\temp\Results_2013Apr02_110133_6692.xml";

            this.lblResultFile.Text = string.Format(@" File:{0}",workbookPath);
            if (File.Exists(workbookPath))
            {
                Excel.Application excelApp = new Excel.Application();
                excelApp.Visible = true;
                Excel.Workbook excelWorkbook = excelApp.Workbooks.OpenXML(workbookPath, Type.Missing, Excel.XlXmlLoadOption.xlXmlLoadPromptUser);
            }
            else
            {
                MessageBox.Show(String.Format("File:{0} does not exists", workbookPath));
            }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top