1

参考までに、私は Perl と Win32::OLE を使用していますが、エラーは Word VBA のものです。

Perl の Win32::OLE モジュールを使用して、Word でテーブルを作成し、その特定の要素をフォーマットしようとしています。テーブル (15 x 3) を作成し、(2, 1) から (14, 3) までのセル、つまり上行と下行を除くすべてのセルを指す範囲オブジェクトを正常に作成しました。

次に、OutsideLineStyle と InsideLineStyle を設定し、境界線を有効にしましたが、結果のテーブルにはテーブル内に垂直方向の境界線がありません。テーブル全体と行間には境界線がありますが、列間には境界線がありません。

wdBorderVertical を設定してこれを修正しようとしましたが、「要求されたコレクションのメンバーが存在しません」というエラーが発生します。理由はわかりません。

これが私のコードです:

    $cells = $document->Range( $table->Cell(2, 1)->Range->Start, $table->Cell(14, 3)->Range->End );
    $cells->Borders->{OutsideLineStyle} = wdLineStyleSingle;
    $cells->Borders->{OutsideLineWidth} = wdLineWidth150pt;
    $cells->Borders->{InsideLineStyle} = wdLineStyleSingle;
    $cells->Borders->{InsideLineWidth} = wdLineWidth150pt;
    $cells->Borders->Item(wdBorderRight)->{LineStyle} = wdLineStyleSingle;
    $cells->Borders->Item(wdBorderRight)->{LineWidth} = wdLineWidth150pt;

# The next two lines generate the error.
    $cells->Borders->Item(wdBorderVertical)->{LineStyle} = wdLineStyleSingle;
    $cells->Borders->Item(wdBorderVertical)->{LineWidth} = wdLineWidth150pt;

    $cells->Borders->{Enable} = 1;

セル範囲の wdBorderVertical は存在しませんか? 選択やループを使用せずにこれを実行しようとしています.Rangesが特別に使用されているように見えるので(おそらく私は間違っています)、不要なループなどを避けることができ、単一の選択に対して複数のRangeを使用できます.

4

2 に答える 2

1

実際wdBorderVertical、セル範囲には存在しない場合があります。セル範囲に適用されたコードを使用して見つけた検索結果wdBorderVerticalはなく、通常はセルまたはテーブルにのみ適用されます。これを希望どおりに実行するには、ループを使用する必要がある場合があります。

于 2009-09-30T19:46:14.853 に答える
0

Cellsperl はわかりませんが、 のメンバーが必要だと思いますRange。たとえば、行 #1 には次のようなものが必要です。

$cells = $document->Range( $table->Cell(2, 1)->Range->Start, $table->Cell(14, 3)->Range->End )->Cells;
于 2012-04-07T09:35:22.263 に答える