gpt4 book ai didi

c# - 使用 ShapeRange 在 Excel 中调整注释大小

转载 作者:太空狗 更新时间:2023-10-29 21:58:42 24 4
gpt4 key购买 nike

我有一个以编程方式创建的电子表格,其中包含大量评论(最多 40,000 条)。从工作表中删除几列后,评论会调整大小。这显然是 excel 中的错误。 ( http://answers.microsoft.com/en-us/office/forum/office_2007-excel/excel-comment-boxes-resizing-themselves-andor/3fdf3e72-6ca5-4186-a656-b7b6fd8db781?msgId=d55534a5-4603-482e-ac97-9ec260124f78 )

理想情况下,我希望在删除列后立即自动调整所有评论的大小。

尝试避免循环遍历每个单独的评论,这是我迄今为止尝试过的方法。

  • 设置 AutoShapeDefaults 无效 - 注释在删除列后仍会调整大小。
  • XlPlacement 属性。 XlMove 和 XLMoveAndSize 没有效果。
  • Worksheet.Shapes.SelectAll 抛出 OutOfMemory Exception,无论评论数量多少

我的想法是获取电子表格中所有评论的 ShapeRange 对象并从那里设置大小。

这非常有效:

        public static void ResizeComments()
{
Microsoft.Office.Interop.Excel.Workbook objWorkbook;
objWorkbook = (Workbook)Globals.ThisAddIn.Application.ActiveWorkbook;
Worksheet objSheet = (Worksheet)objWorkbook.ActiveSheet;

int[] test = {1,2,3,4,5};
ShapeRange sRange = objSheet.Shapes.Range[test];
sRange.Height = 100;
sRange.Width = 220;
}

对此进行更改会在 AutoSize 行引发异常“HRESULT 异常:0x800A03EC”。

        ShapeRange sRange = objSheet.Shapes.Range[test];
sRange.TextFrame.AutoSize = true;

使用我实际的形状索引数组会抛出相同的异常,但在 Shapes.Range[] 处。我在调试时查看了 shapes 变量,它与 test 相同,除了它是 int[249] 而不是 int[5 ];

        int[] shapes = (int[])shapes.ToArray(typeof(int)); 
ShapeRange sRange = objSheet.Shapes.Range[shapes];

最佳答案

好吧,我将使用必须从 Excel 模块内运行的 VBA 代码来回答。来自讨论与回答here .

Sub CommentFixer()
Dim Arng As Range, Acl As Variant, InitRng As Variant, MaxSize
Set InitRng = Selection
Set Arng = Application.InputBox("Select Ranges", , , , , , , 8)

For Each Acl In Arng
If (Not (Acl.Comment Is Nothing)) And (Acl.MergeArea.Count = 1) Then
Acl.Select
Selection.Comment.Visible = True
Selection.Comment.Shape.TextFrame.AutoSize = True
'Commented as is obsolete if no further processing is needed
'Selection.Comment.Shape.Select
'Commented not to fix Comment Aspect Ratio
'With Selection.ShapeRange 'Fix 2.5 aspect ratio
' .LockAspectRatio = msoFalse
' MaxSize = .Width / 2.5
' If MaxSize > .Height Then
' .Height = MaxSize
' Else
' .Width = .Height * 2.5
' End If
'End With
'Commented to neglect fonts
'With Selection.Font
' .Bold = False
' .Name = "Times New Roman"
' .Size = 12
'End With

Acl.Comment.Visible = False
End If
Next
InitRng.Select

End Sub

保留不需要的代码和注释项。还不能处理的merged cell我还要补上。

干杯

关于c# - 使用 ShapeRange 在 Excel 中调整注释大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12977353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com