2017-06-15 142 views
0

我收到了一些從第三方數據庫自動生成的Word文檔。大多數(如果不是全部)內容都在表格中。問題在於,在許多單元格中,文本由於溢出而不完全可見。列寬和行高用絕對值設置。列寬不能改變。如果發生溢出,則應更改行高以允許文本在更多行上運行。微軟Word表格單元格文本溢出

我的問題是:是否有可能找到這種情況的單元格,只有這些行將高度設置爲wdRowHeightAuto。

我試着把所有的行都改成自動調高,但是這真的弄亂了佈局。

我現在正在考慮以下方法,但我真的很想知道是否沒有簡單的方法。

  1. 針對每個小區設置Cell.FitText爲true
  2. 檢查字體放大已經改變
  3. 設置FitText回假
  4. 如果字體規模由FitText改變,設置行高爲Auto

任何幫助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

感謝Jean-Pierre Oosthuizen建議使用wdRowHeightAtLeast,我找到了一個解決方案。即使通過使用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; 
         } 
        } 
       }