非常に難しいバグがあり、修正が見られません。この主題は、長い間私を本当に狂気に駆り立てます。次のシナリオを考えてみましょう。
1) PowerPoint 2003 プレゼンテーションがあります。唯一のスライドと唯一の図形が含まれていますが、図形にはランダムなテキスト表現構造を持つ箇条書きリストを含むテキスト フレームが含まれています。
2) PowerPoint 2007 を使用して、箇条書きの段落ごとに箇条書きのインデントを取得する必要があります。プレゼンテーションを互換モードで開き、次の VBA スクリプトを適用することで、この要件を満たすことができます。
With ActivePresentation
Dim sl As Slide: Set sl = .Slides(1)
Dim sh As Shape: Set sh = sl.Shapes(1)
Dim i As Integer
For i = 1 To sh.TextFrame.TextRange.Paragraphs.Count
Dim para As TextRange: Set para = sh.TextFrame.TextRange.Paragraphs(i, 1)
Debug.Print para.Text; para.indentLevel, sh.TextFrame.Ruler.Levels(para.indentLevel).FirstMargin
Next i
End With
次の出力が生成されます。
A 1 0
B 1 0
C 2 24
D 3 60
E 5 132
明らかに、すべてが完璧です。適切なリスト アイテムのテキスト、リスト アイテムのレベル、および箇条書きのインデントが示されています。しかし、C# を使用して同じ結果を得る方法がわかりません。Microsoft.Office.Interop.PowerPoint 2.9.0.0 (MSPPT.OLB、MS Office 12 から取得) への COM 参照を追加しましょう。
// presentation = ...("presentation.ppt")... // a PowerPoint 2003 presentation
Slide slide = presentation.Slides[1];
Shape shape = slide.Shapes[1];
for (int i = 1; i<=shape.TextFrame.TextRange.Paragraphs(-1, -1).Count; i++) {
TextRange paragraph = shape.TextFrame.TextRange.Paragraphs(i, 1);
Console.WriteLine("{0} {1} {2}", paragraph.Text, paragraph.IndentLevel, shape.TextFrame.Ruler.Levels[paragraph.IndentLevel].FirstMargin);
}
ああ、男.それは何ですか。ここに問題があります。まず、文字が見つかるparagraph.Text
まで値がトリミングされます'\r'
(ただし、paragraph.Text[0]
実際には最初の文字 O_o が返されます)。でも大丈夫、私はこれに目をつぶることができます。しかし...しかし、第二に、最初のマージンが常にゼロであり、それらがどのレベルに属しているかは問題ではない理由がわかりません。互換モードでは常にゼロです...信じがたいです... :) それで、それを修正する方法、または単に回避策を見つける方法はありますか? この問題の解決に関して、どんな助けでも受け入れたいと思います。この問題に関連する記事も見つかりません。:( おそらく、あなたはそれに直面したことがあります... それとも、修正されていない単なるバグであり、マイクロソフトに報告する必要がありますか?
ありがとうございました。