2

OSX で Mono を使用してDocXを実行しようとしています。最近のビルド、バージョン 3.2.1 を使用しています。xbuild でのビルドは成功しますが、Hello World の例は実行時に失敗します。

基本的に、populate document 関数 (以下の抜粋):

public static DocX Create(string filename) {
            switch (rel.RelationshipType)
            {
                case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes":
                    document.endnotesPart = package.GetPart(new Uri("/word/" + rel.TargetUri.OriginalString.Replace("/word/", ""), UriKind.RelativeOrAbsolute));
                    using (TextReader tr = new StreamReader(document.endnotesPart.GetStream()))
                        document.endnotes = XDocument.Load(tr);
                    break;

                case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes":
                    document.footnotesPart = package.GetPart(new Uri("/word/" + rel.TargetUri.OriginalString.Replace("/word/", ""), UriKind.RelativeOrAbsolute));
                    using (TextReader tr = new StreamReader(document.footnotesPart.GetStream()))
                        document.footnotes = XDocument.Load(tr);
                    break;

                case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles":
                    document.stylesPart = package.GetPart(new Uri("/word/" + rel.TargetUri.OriginalString.Replace("/word/", ""), UriKind.RelativeOrAbsolute));
                    using (TextReader tr = new StreamReader(document.stylesPart.GetStream()))
                        document.styles = XDocument.Load(tr);
                    break;

                case "http://schemas.microsoft.com/office/2007/relationships/stylesWithEffects":
                    document.stylesWithEffectsPart = package.GetPart(new Uri("/word/" + rel.TargetUri.OriginalString.Replace("/word/", ""), UriKind.RelativeOrAbsolute));
                    using (TextReader tr = new StreamReader(document.stylesWithEffectsPart.GetStream()))
                        document.stylesWithEffects = XDocument.Load(tr);
                    break;

                case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable":
                    document.fontTablePart = package.GetPart(new Uri("/word/" + rel.TargetUri.OriginalString.Replace("/word/", ""), UriKind.RelativeOrAbsolute));
                    using (TextReader tr = new StreamReader(document.fontTablePart.GetStream()))
                        document.fontTable = XDocument.Load(tr);
                    break;

                case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering":
                    document.numberingPart = package.GetPart(new Uri("/word/" + rel.TargetUri.OriginalString.Replace("/word/", ""), UriKind.RelativeOrAbsolute));
                    using (TextReader tr = new StreamReader(document.numberingPart.GetStream()))
                        document.numbering = XDocument.Load(tr);
                    break;

                default:
                    break;
            }

次のエラーで失敗します:

Unhandled Exception:
  System.ArgumentException: partUri
  Parameter name: Absolute URIs are not supported
at System.IO.Packaging.Check.PartUri (System.Uri partUri) [0x00000] in <filename unknown>:0 
at System.IO.Packaging.Package.GetPart (System.Uri partUri) [0x00000] in <filename unknown>:0 
at Novacode.DocX.PopulateDocument (Novacode.DocX document, System.IO.Packaging.Package package) [0x00000] in <filename unknown>:0 
at Novacode.DocX.PostLoad (System.IO.Packaging.Package& package) [0x00000] in <filename unknown>:0 
at Novacode.DocX.Load (System.IO.Stream stream) [0x00000] in <filename unknown>:0 
at Novacode.DocX.Create (System.String filename) [0x00000] in <filename unknown>:0 

Novacode は名前空間です。

CS/Mono の初心者である私には、なぜ問題が発生するのか、また、なぜ出力がより正確な場所を詳細に示さないのかがわかりません (デフォルトではデバッグ ビルドです)。

4

2 に答える 2

0

この例外の修正を適用するパッチを提出しました。パッチ番号は revobtz による 16266 です。このパッチには、Docx を mono に移植できるようにする修正が含まれています。ドキュメントの作成時に、Mono OS X で絶対パスがサポートされていないという例外を修正しました。VS を使用して Windows でテストし、xamarin を使用して Mac OS X でテストしました。

アップデート

DocX の最新バージョンをダウンロードしてください。バグは既に修正されています。

于 2014-04-20T22:41:31.090 に答える
0

UriKind.Relativeの代わりに使ってみてくださいUriKind.RelativeOrAbsolute

于 2013-09-23T22:56:09.840 に答える