Open XML SDKを使用して、Officeアプリ(word / ppt)で現在開いているドキュメントの一部を操作することは可能ですか?最も簡単なのはVSTOを使用することですが、その速度は遅く、クリップボードを使用して要素を挿入する必要があるため、OXMLSDKは直接的で単純です。
誰かがコードサンプルを投稿できれば、それは素晴らしいことです。
よろしくお願いします
Rakesh
Open XML SDKを使用して、Officeアプリ(word / ppt)で現在開いているドキュメントの一部を操作することは可能ですか?最も簡単なのはVSTOを使用することですが、その速度は遅く、クリップボードを使用して要素を挿入する必要があるため、OXMLSDKは直接的で単純です。
誰かがコードサンプルを投稿できれば、それは素晴らしいことです。
よろしくお願いします
Rakesh
はい、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のこの常識的な使用法は不可能であるということです。しかし、これは間違っています。
以下のようなもの:-
//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ループを回避することもできます。
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);
...
}
私の場合、私はドキュメントを読んでいるだけで、それを保存しませんが、必要に応じて、変更されたストリームを別のファイルに書き込むことができます。
どうやら、Sharepointなしではこれを行うことはできません。
ZeyadJarabiによると/..
...共有ロックを取得する方法を理解するプラットフォーム(SharePointやSkyDriveなど)が必要です。この概念がないと、アプリケーションとSDKは読み取りまたは書き込みロックのみを取得できるため、これら2つのテクノロジーが同じファイルにアクセスできなくなります。