MS Officeをインストールせず、Interopライブラリを使用せずに、サーバーでMS Officeファイルを読み取るにはどうすればよいですか?
-
03-07-2019 - |
質問
相互運用ライブラリは遅く、MS Officeをインストールする必要があります。 多くの場合、サーバーにMS Officeをインストールしたくありません。
Apache POI を使用したいのですが、.NETを使用しています。
ファイルのテキスト部分を抽出するだけでよく、「情報の保存」も作成もしません。 Officeファイル内。
非常に大きなドキュメントライブラリがあり、それを新しいXMLファイルに変換できないことを説明する必要があります。
バイナリファイルのパーサーを記述したくありません。 Apache POIのようなライブラリがこれを行います。残念ながら、これはJavaプラットフォーム専用です。このアプリケーションをJavaで書くことを検討すべきでしょう。
.NETでPOIに代わるオープンソースの選択肢はまだ見つかりません。Javaで独自のアプリケーションを作成すると思います。
解決
すべてのMS Officeバージョンの場合:
- Wordの TXテキストコントロールや TMS Flexcel Studio for Excel
新しいOffice(2007)の場合:
-
system.io.packaging
の.net機能を使用して、基本的な作業を行うことができます。詳細については、 http://msdn.microsoft.com/en-us/library /bb332058.aspx
旧オフィス(2007年以前):
- 古いOffice形式が文書化されました: http://www.microsoft.com /interop/docs/officebinaryformats.mspx 。本当に簡単なことをしたい場合は、試してみてください。ただし、これらの形式は非常に複雑であることに注意してください。
他のヒント
Asposeコンポーネントをご覧ください。サーバーに完全なOfficeをインストールしなくても、相互運用機能を模倣するように設計されています。
新しいdocx形式は本質的にXMLベースのファイルであるため、構造がわかれば、標準のXML DOM手法を使用してプログラムで作成および操作できます。
ファイルは基本的に、代替ファイル拡張子を持つzipアーカイブです。 System.IO.Packaging
名前空間を使用してファイルの内部要素にアクセスし、それらを XmlDocument
で開いて操作を実行します。
これを行うためのサンプルがあります。SourceForgeのOffice Open XMLプロジェクトは、インスピレーションを探す価値があるかもしれません。
古いバイナリ形式に関しては、これらはMS独自のものであり、内部からコンテンツを取得する唯一の方法は、Officeオブジェクトモデル(Officeのインストールが必要)、またはサードパーティのファイルコンバーターを使用することです/ parser。
残念なことに、これらのファイルを操作するためのファーストパーティおよびネイティブな.NETプラットフォームはありません。
これらのファイルで何をする必要がありますか?それらをユーザーにストリーミングしたいだけなら、基本的なファイルストリームは問題ありません。ユーザーがOfficeで開くことができる新しいファイルを(おそらくテンプレートに基づいて)作成してユーザーに送信する場合、さまざまな回避策。
Webサイトで使用するためにOfficeドキュメントにデータを実際に保持している場合、それは間違っています。 Officeドキュメントは、Excelスプレッドシートやアクセスデータベースであっても、インタラクティブなWebサイトでの使用には実際には適切な選択ではありません。
ドキュメントがWord 2007形式の場合、system.io.packagingライブラリを使用してプログラムで操作できます。
Javaの世界には、 JExcelApi もあります。私が見ることができたものから、POIよりずっときれいに書かれています。そのため、.NETへのそのコードの移植であっても、もちろんあなたが十分な時間を手に持っているかどうかによっては、問題外ではないかもしれません。
OpenOffice。
サーバーのライセンスにお金をかけずに、またはサーバーに関連付けられた脆弱性を持たせることなく、それに対してプログラムを作成して、多くのことをさせることができます。
Microsoft Excelワークブックは、ワークブックをデータベーステーブルのように見せるためのODBCドライバー(またはOLE DBドライバーですか?しかし、Office Suiteなしでそのドライバーが利用可能かどうかはわかりません。
OpenOfficeを使用できます。コマンドライン変換ツールがあります:
要するに、OpenOfficeでマクロを定義し、そのマクロをコマンドラインで呼び出します OpenOfficeへの引数。その引数では、ローカルファイル(Officeファイル)の名前は エンコードされました。
これは素晴らしい解決策ではありませんが、実行可能でなければなりません。