8

Open XML SDKを使用して、Officeアプリ(word / ppt)で現在開いているドキュメントの一部を操作することは可能ですか?最も簡単なのはVSTOを使用することですが、その速度は遅く、クリップボードを使用して要素を挿入する必要があるため、OXMLSDKは直接的で単純です。

誰かがコードサンプルを投稿できれば、それは素晴らしいことです。

よろしくお願いします
Rakesh

4

4 に答える 4

5

はい、OpenXML sdk 2を使用して開いているVSTOドキュメントを変更してから、変更されたxmlを使用して開いているドキュメントを更新することができます。

http://msdn.microsoft.com/en-us/library/ff191178.aspx

http://code.msdn.microsoft.com/Improve-Automation-415bff13

基本的に、範囲からxmlを取得し、それをストリームとして扱い、パッケージ化し、パッケージでsdkを使用してから、プロセスを逆にして変更したxmlを挿入し直します。

そこにある知恵は、SDKのこの常識的な使用法は不可能であるということです。しかし、これは間違っています。

于 2012-07-03T00:55:33.993 に答える
0

以下のようなもの:-

//include the namespace

using DocumentFormat.OpenXml.WordProcessing

//Open and manipulate temp.docx 

using (WordprocessingDocument myDoc = WordprocessingDocument.Open("temp.docx", true)) 
{
    //Access main part of document 
    MainDocumentPart mainPart = myDoc.MainDocumentPart; 

    //Add new comments part to document 
    mainPart.AddNewPart<WordprocessingCommentsPart>(); 

    //Delete Styles part within document 
    mainPart.DeletePart(mainPart.StyleDefinitionsPart); 

    //Iterate through all custom xml parts within document 
    foreach (CustomXmlPart customXmlPart in mainPart.CustomXmlParts) {
        //DO SOMETHING 
    }
}

また、LINQを使用してforeachループを回避することもできます。

于 2010-03-14T13:24:16.613 に答える
0

ClosedXML自体を使用してExcelドキュメントを使用してこれを行うことができました(ファイルをパスexcelFileNameとしてディスクに保存した後):

byte[] byteArray = null;
using (var fs = new FileStream(excelFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) {
    int numBytesToRead = Convert.ToInt32(fs.Length);
    byteArray = new byte[numBytesToRead];
    fs.Read(byteArray, 0, numBytesToRead);
}
using (MemoryStream mem = new MemoryStream()) {
    mem.Write(byteArray, 0, byteArray.Length);
    XLWorkbook wb = new XLWorkbook(mem);
    ...
}

私の場合、私はドキュメントを読んでいるだけで、それを保存しませんが、必要に応じて、変更されたストリームを別のファイルに書き込むことができます。

于 2016-03-01T21:18:34.443 に答える
-1

どうやら、Sharepointなしではこれを行うことはできません。

ZeyadJarabiによると/..

...共有ロックを取得する方法を理解するプラットフォーム(SharePointやSkyDriveなど)が必要です。この概念がないと、アプリケーションとSDKは読み取りまたは書き込みロックのみを取得できるため、これら2つのテクノロジーが同じファイルにアクセスできなくなります。

于 2010-03-19T15:56:08.917 に答える