2017-06-15 17 views
0

サードパーティのデータベースから自動的に生成されたいくつかのWord文書を受け取りました。ほとんどの(すべてではないにせよ)コンテンツがテーブルにあります。問題は、多くのセルでは、オーバーフローのためにテキストが完全に見えないことです。列の幅と行の高さは絶対値で設定されます。列の幅は変更できません。オーバーフローがある場合は、行の高さを変更して、テキストをより多くの行で実行できるようにする必要があります。MS Wordテーブルセルのテキストのオーバーフロー

私の質問です:どのような場合でも、この場合のセルを見つけることができ、これらの行のみが高さをwdRowHeightAutoに設定していますか?

すべての行を自動高さに変更しようとしましたが、これは実際にレイアウトを混乱させます。

私は今、次のアプローチを考えていますが、もっと簡単な方法がないのか本当に不思議です。各セルの

  1. 、フォントスケールはfalseに戻っ
  2. 設定FitTextを変更されている場合はtrueを
  3. チェックするように設定Cell.FitText
  4. フォントスケールはAutoに、FitTextによって設定された行の高さを変更された場合

ヘルプVBAまたはC#をいただければ幸いです。

これは私がいるところですが、異なる列幅のためにアクセスできない個々の列にアクセスする際の実行時エラーが発生します。マージされたセルがあるため、個々の行にもアクセスできません。

app = new Word.Application(); 

      foreach (var file in inputFiles) 
      { 
       var doc = app.Documents.Open(file); 

       foreach (var table in doc.Tables) 
       { 
        foreach (var column in table.Columns) 
        { 
         try 
         { 
          foreach (var cell in column.Cells) 
          { 
           cell.FitText = true; 

           bool textIsScaled = false; 

           if (cell.Range.Font.Scaling != 100) 
            textIsScaled = true; 

           cell.FitText = false; 

           if (textIsScaled) 
            cell.HeightRule = WdRowHeightRule.wdRowHeightAuto; 
          } 
         } 
         catch (Exception) 
         { 
          continue; 
         } 
        } 
       } 

       doc.Save(); 

       doc.Close(); 

      } 
+0

あなたは 'SomeTable.Rows.HeightRule = wdRowHeightAtLeast'を使用してみました、これは必要に応じて行の高さが調整されます追加のテキストがあるとしている場合、あなたがそれを設定何の最小値に行の高さを維持しています。 –

+0

提案していただきありがとうございます!結果は有望だった。行の高さはオーバーフローが発生したときに変更する必要があります。私はTable.Rows.HeightRuleを設定しようとしましたが、オーバーフローのない行の高さがあまりにも多く変更されました。私はSetHeight(cell.Height、wdRowHeightAtLeast)を使って試してみましたが、ここで私は再びセルがマージされているため個々の行やセルにアクセスできないという問題があります。 – ltondeleir

答えて

1

私は解決策にwdRowHeightAtLeastを使用するには、ジャン=ピエール・Oosthuizenの提案に感謝を発見しました。 Range.Cellsを使用して個々の行にアクセスできない場合でも(垂直方向に結合されたセルのため)、個々のセルにアクセスできます。

wdRowHeightAtLeastの最小値として現在の行の高さを渡して、テキストがセルに収まる場合にレイアウトが変更されないようにします。

foreach (var table in doc.Tables) 
       { 
        table.Rows.AllowBreakAcrossPages = 0; 

        var cells = table.Range.Cells; 

        foreach (var cell in cells) 
        { 
         try 
         { 
          cell.SetHeight(cell.Height, WdRowHeightRule.wdRowHeightAtLeast); 
         } 
         catch (Exception ex) 
         { 
          Logger.LogError(ex); 
          continue; 
         } 
        } 
       } 
関連する問題