gpt4 book ai didi

excel - 如何复制具有富文本格式但不全局单元格格式的 Excel 单元格?

转载 作者:行者123 更新时间:2023-12-02 07:46:04 28 4
gpt4 key购买 nike

使用 VBA,我将一个单元格的值复制到另一个单元格:

Dim s As Range
Dim d As Range
Set s = Range("A1")
Set d = Range("B2")
d.Value = s.Value

这工作正常,但如果源包含富文本格式,则格式会丢失。

我可以复制整个单元格、格式和所有内容:

s.Copy d

但这不仅带来了富文本格式,还带来了单元格上的全局格式——背景颜色、边框等。我只对复制适用于的格式感兴趣文本的部分(例如,句子中的一个单词以粗体显示)。

我还尝试复制每个字符的格式:

For ci = 1 to Len(sourcevalue)
d.Characters(ci, 1).Font.Bold = s.Characters(ci, 1).Font.Bold
Next

上面的实际代码包括斜体、下划线等,并将 Characters() 缓存为对象以提高速度,但对于生产使用来说,性能仍然太慢。 p>

我能想到的最后一个选项是复制带有格式的单元格,然后撤消对背景颜色或图案、边框、字体名称/大小等的任何更改:

bg = d.Interior.ColorIndex
s.Copy d
d.Interior.ColorIndex = bg

这看起来仍然很困惑,很难保存所有要重新应用的格式,而且我无法“撤消”可以在单元格或字符级别应用的格式,例如粗体、斜体等不删除字符级设置。

还有其他选择吗? Excel OpenOfficeXML 文件中的格式存储有字符范围,但这些格式化范围似乎无法通过 API 获得,至少据我所知是这样。

编辑:使用下面的 KazJaw 方法,我能够通过以下代码获得我需要的内容:

Dim TmpFormat As Range
Set TmpFormat = Range("$XFD$1")
Dest.Copy
TmpFormat.PasteSpecial xlPasteFormats
Source.Copy
Dest.PasteSpecial xlPasteAll
TmpFormat.Copy
Dest.PasteSpecial xlPasteFormats
Dest.Font.Name = TmpFormat.Font.Name
Dest.Font.Size = TmpFormat.Font.Size
TmpFormat.ClearFormats

这会暂时保留第一行最后一个单元格中目标单元格的单元格格式,复制具有所有格式的源,将格式粘贴回临时单元格中,最后还复制回来保留的整体字体和大小(在我的情况下,我不想从源复制)。最后,临时单元格被清除,因此它不会影响工作表尺寸。

这是一个不完美的解决方案,特别是因为它依赖于剪贴板,但性能很好并且可以完成所需的工作。

最佳答案

我刚刚做了一些测试,我对结果感到有点惊讶,这可能是您的解决方案,或者只是更多探索它的提示。

想象一下我们一开始有这样的情况:

enter image description here

如果您运行这个简单的代码:...

Sub PossibleSolution()

Range("A1").Copy 'full formatted cell
Range("A3").PasteSpecial xlPasteAll
Range("A2").Copy 'clear format cell
Range("A3").PasteSpecial xlPasteFormats

End Sub

...您将得到以下结果:

enter image description here

关于excel - 如何复制具有富文本格式但不全局单元格格式的 Excel 单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16990946/

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