如何使Excel的“自动适应行高”功能实际自动适应行高?


88

对于我记得的每一代Excel(包括我现在正在使用的2010年),当单元格包含换行文本时,Excel的“自动调整行大小”功能有时实际上无法自动调整行的大小。当它正常工作时,所有文本都会显示出来,并且在文本的最后一行下方没有其他空格。如果失败,它将在文本下方添加额外的空间。更糟糕的是,您所看到的并不总是所得到的,即,在屏幕上看起来不错的文本在打印时会被截断。根据放大/缩小还是实际大小,您还会得到不同的大小。

简单的测试用例:

为什么在单元格A1中的文本之后有一个单行间隙,而在A2中却没有?

(要重现:将A列的宽度设置为17.14(125像素),在文本上换行,并在单元格顶部对齐。)

(我再次检查是否对两行都应用了“自动调整行高”。缩放级别为100%。)

第一行自动调整失败,第二行成功

是否有任何已知的解决方法,而不必依靠手动调整行高(仅适用于少数几行)?


如果有人想重现我的问题的示例,则列A的宽度为17.15(125像素)。
devuxer 2012年

1
错误似乎取决于字体和字体大小
Raystafarian 2012年

1
@Raystafarian,似乎与Wrap Text一起打开时不起作用。
devuxer 2012年

1
我尝试自动拟合列,将一列加宽,然后自动拟合行。这使它从73页减少到64页,但是大多数行的底部仍然有很多空白行。我将行对齐到顶部。手动更改行的大小使它在我处理文档时看起来不错,但在预览或打印中却没有。

1
是的,太烦人了!至少在Excel 2007中也看到了这一点。不要记得曾经在Excel 2003中看到它
。– abstrask

Answers:


105

我刚刚找到的一种方法(将上一篇文章扩展了一点):

  • 选择整个工作表。
  • 将列的大小调整得更宽一些(因为选中了整个工作表,所以所有列都会变宽)
  • 双击行分隔符-行高将自动调整
  • 双击列分隔符-列宽将自动调整

瞧!


2
这似乎确实有效。一个灰色区域是您说的“宽一点”。我尝试过的其中一个示例只有在我对列进行适当拉伸后才能起作用,但最终还是使它起作用。谢谢!
devuxer

5
我选择了整个工作表,然后双击两个随机行之间的行分隔符,然后整个文档重新调整了行高。
基思·西蒙斯

6
请注意,自动调整不适用于任何合并的单元格:support.microsoft.com/kb/212010
freb 2014年

仅当所有列的宽度相同时,这种方法才行吗?当我将列的大小调整为稍宽时,所有其他列的宽度相同(在Excel 2010中)。
Ed Greaves 2015年

等一下-这种方法的副作用是增加了工作表中所有列的宽度,不是吗?
Ant_222 '18

13

Excel的WYSIWYG并不是最好的。在您的照片中,“猫”。才刚刚进入第五线。如果将缩放百分比减小到小于100%(例如99%)的任何值,则“ cat”。现在已降至第六行。我认为Excel正在尝试以一种自动拟合的方式来确保无论缩放级别如何,几乎所有内容都始终可见。

这不是您使用AutoFit会遇到的唯一问题。另外,单词包装的单元格的打印方式并不总是与您在屏幕上看到的匹配。以您的示例为例,将字体更改为Courier,同时将大小保留为11。

将字体更改为Courier

如您所见,单元格A1似乎多了1.5行。现在看一下打印预览“猫”。被完全隐藏了。

打印同一文件的预览

以我的经验,Excel在某些字体和字体大小方面比其他问题更容易出现此问题。CourierCourier New差,11号通常比10或12号差。(为什么他们选择11号作为新的默认值,我不知道。)


所以...基本上他们打破了它。您的解释虽然合理,但确实使我感到
烦恼,

3

我只是为此目的写了一个小宏。我给它分配了一个快捷键(Ctrl-Shift-J),它对我来说就像是一种魅力。

Sub ArrangeTable()
'set proper column width and row height for the current region
    With Selection.CurrentRegion
        .Columns.ColumnWidth = 200
        .Columns.EntireColumn.AutoFit
        .Rows.EntireRow.AutoFit
    End With
End Sub

要使其永久可用,您可以轻松制作一个自动加载的加载项:

  • 在新的空白工作簿中创建一个模块,然后粘贴代码,
  • 为它分配所需的快捷键,
  • 然后Save As,,Add-in到文件夹%appdata%\Microsoft\Excel\XLSTART
    。这样,每次启动Excel时,它将被无形地加载。

或者,您可以执行以下操作:Private Sub Worksheet_Change(ByVal Target as Range)ArrangeTable End Sub
kurdtpage's


0

有一个KB文章在这其中“建议”(这是不可接受的稀疏,在微软的经典方式),如果你没有确定的行高度,高度自动autofitting会永久消失为工作表中的该行。不过,您未触摸其高度的行将自动适应。

虽然您可以在2003年使用“标准宽度”设置来重置列宽(疯子设计的2007:更改为“默认宽度”),但是他们却忘记了(再次)(再次)将其放入行中。因此永久性似乎是不可避免的。这意味着,如果您将默认高度设置为15,并且创建了一张图纸并将所有高度设置为12,则您将失去自动调整的功能。


1
我无法复制此行为。一旦执行“自动调整行高”,该行的任何手动高度设置将立即替换为自动调整高度。问题很简单,因为自动调整高度经常是错误的。
devuxer

我可以复制此行为。这正是对我有用的。
彼得·诺尔

0

有时,有核方法可以解决自动问题的发生。

我要做的是从每个单元格中复制文本并将数据粘贴到记事本中,然后删除该行。然后,我立即复制并插入空白行,但与已删除的行具有相同的格式和良好的行为。(您必须使用左行按钮复制并插入整行。)

完成后,您必须返回并将记事本中的文本插入每个单元格。(F2在插入文本之前,请使用或以其他方式激活每个单元格的编辑模式。)这很麻烦,因此这是万不得已的方法,尤其是对于宽度非常大的工作表而言。

有时,这是唯一的解决方案,因为问题出在程序本身。


1
从每个单元格中复制文本 -这似乎需要手动设置格式的工作。
德米特里·格里戈里耶夫

0

我尚未对此进行彻底的测试,但它一直为我工作。本质上,它将自动调整所有图纸,然后返回并设置列宽为原始宽度,除非已通过自动调整对其进行了扩展。我只有10列,但从来没有超过1000行,因此请根据需要调整代码。

Sub ResizeCells()
    Dim sheetCounter As Integer
    Dim rowCounter As Integer
    Dim colCounter As Integer
    Dim totalWidth As Double
    Dim oldColWidths(1 To 10) As Double

    For sheetCounter = 1 To ThisWorkbook.Sheets.Count
        ActiveWorkbook.Worksheets(sheetCounter).Select
        totalWidth = 0

        ' Extend the columns out to 200
        For colCounter = 1 To 10
            oldColWidths(colCounter) = Cells(1, colCounter).ColumnWidth
            totalWidth = totalWidth + oldColWidths(colCounter)
            Cells(1, colCounter).ColumnWidth = 200
        Next

        For rowCounter = 4 To 1000
            If Cells(rowCounter, 1).Value <> "" Or Cells(rowCounter, 2).Value <> "" Or Cells(rowCounter, 3).Value <> "" Then
                Rows(rowCounter & ":" & rowCounter).EntireRow.AutoFit
            End If
        Next

        ' do autofit
        For colCounter = 1 To 10
            Cells(1, colCounter).EntireColumn.AutoFit
        Next

        ' reset to original values if current width is less than the original width.
        For colCounter = 1 To 10
            If Cells(1, colCounter).ColumnWidth < oldColWidths(colCounter) + 0.25 Then
                Cells(1, colCounter).ColumnWidth = oldColWidths(colCounter)
            End If
        Next
    Next
End Sub

它如何解决自动拟合错误?您可以自动调整行,然后自动调整列,然后重新设置原始列的宽度。为什么以正确的装配行高度结尾?顺便说一句,totalWidth是失业的。
Ant_222 '18

它对我来说不完全有效,因为您只能恢复那些已经变窄的库伦的宽度。因此,您的算法不会保留列宽。
Ant_222 '18

-1

释义Dunc

我已经通过以下方式解决了类似的问题:

  1. 选择整个电子表格。

  2. 双击两行之间的空白处的行。

特别是为了解决您的那一行额外的问题,我假设那里有一个字符。它可能不是一个可见的字符,但是肯定有一些东西。


3
您的步骤与我已经尝试过的步骤没有什么不同(在行之间双击只是“自动调整行高”的快捷方式)。至于您认为还有一个额外角色的理论,您也许是对的,但我当然没有键入一个,而且我也不知道该如何摆脱它。我邀请您尝试在Excel中键入与插图中相同的确切文本,看看是否获得相同的结果。
devuxer 2012年

1
我的那里没有人物。
Raystafarian '02

-1

我没有花时间阅读其他评论。为什么该行位于第一个块的底部而不是第二个块?

这是因为文本的结尾距离单元格的右边缘太近。如果将列调整为稍宽一点,然后在行之间双击,它将相应地调整大小。


4
我毫不怀疑您是正确的,但是那不再是“自动”的,而是手动的。
devuxer 2012年

-1

我也忍受了这个微小但极其分散注意力的错误多年。除了摆弄包含大多数文本的单元格的行宽外,我没有其他解决方法,最终程序将恢复并正确显示文本。


摆弄行宽度不是一个可重复的解决方案。
德米特里·格里戈里耶夫

-1

有一个简单的解决方案:

1)选择要自动格式化的所有行(如果块很大,请单击第一个,然后按Shift + End和Shift + Down)

2)右键单击所选内容,“设置单元格格式”,“对齐方式”选项卡,然后取消选中“自动换行”。

希望这可以帮助 ;)


1
如果您取消选中Wrap text,则不再需要自动调整行高,因为所有行的大小均相同。
德米特里·格里戈里耶夫

多年来我一直为这个问题困扰。切换麻烦的行的自动换行文字可恢复自动调整功能。
米奇

-1

我有Excel2010。当我的Zoom设置未达到100%时,我发现此问题发生了。只要我处于100%状态,我就不会使用自动调整功能截断列和行的文本


3
在我用于问题的示例中,我一直都处于zoom = 100%。无论发生问题。
devuxer

-1

我的假设是Excel必须延伸太多行时会打结。我也有类似的经历。它看起来像有一个额外的NL / CR /结尾LF,但我知道有没有。如果我一次在单元格中建立了一些字符,它将自动格式化OK直到达到特定大小,然后将其放在多余的行中。(如果从删除某些字符开始,则会发生类似的相反行为。)在不同的时间,不同的单元格会发生这种情况。

mm!

因此,如果可以扩展像元宽度,则可以避免该问题。如果不能(例如我的情况),那么您就会陷入手动格式设置的困境。就像我说的“笨蛋!”


-1

实际上,那里还有一个额外的角色。每个字段末尾都是隐藏的LF字符。当文本大小正确时,多余的行将容纳LF字符。按照其他人的建议调整列宽的大小可以解决该单元格的问题,但是,如果您的电子表格在同一列中具有许多变化的大小值,则对此单元格的修复可能会导致该列中的另一个单元格出现问题。我已经学会了大部分时间与之共处。


每个字段的末尾肯定没有隐藏的LF字符,除非OP当然使用Alt + Enter将其放在那里。问题实际上是关于没有换行符但Excel仍然无法正确对齐单元格的情况。
德米特里·格里戈里耶夫

-2

对我有效的方法(Excel 2010)是删除我的数据右侧的一百个左右未使用的列。我只能猜测那里有东西会导致自动行高度出现异常。


4
我可以看到有什么帮助,但是对于我的问题中显示的测试用例没有任何区别。
devuxer 2012年

-2

选择所有单元格,然后单击将行分开两次的行,它将自动完成。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.