复制单元格时,MS Excel会添加换行符

时间:2013-02-04 21:18:43

标签: excel copy-paste

MS Excel 2010或2007或复制单元格时的任何版本(不从单元格中选择文本)并粘贴到任何编辑器会添加换行符并将光标发送到下一行。令人讨厌的是将光标向上移动到最后一行。

将光标恢复到最后一行看起来并不是很重要,但如果你作为一名程序员不得不继续这么做,那我觉得非常糟糕。如果excel中有设置可以阻止此任何建议吗?

我试过在网上找不到任何东西,也查找了excel的选项,没有找到任何东西。

3 个答案:

答案 0 :(得分:13)

您可以创建自己的复制例程,该例程不会存储整个单元格,只会创建剪贴板中的值:

Sub OwnCopy()
    Dim DataObj As New MSForms.DataObject

    DataObj.SetText ActiveCell.Value 'depending what you want, you could also use .Formula here
    DataObj.PutInClipboard
End Sub

为了能够编译宏,您需要包含“Microsoft Forms 2.0 Object Library”作为参考(在Visual Basic编辑器中,转到Tools-> References)..

现在可以使用默认的运行宏对话框将此宏指定给另一个快捷方式(例如 Ctrl - Shift - C ) - 或者甚至通过执行Application.OnKey "^c", "OwnCopy"覆盖 Ctrl - c 。但是,我不建议覆盖 Ctrl - c ,因为您很可能希望使用除了粘贴之外的任何其他情况下通常与其一起复制的所有其他信息致编辑。

要使此永久保留,只需将宏存储在您的个人工作簿中。

如果您想要一个更复杂的复制例程,也可以处理多个单元格/选择区域,请使用以下代码:

Sub OwnCopy2()
    Dim DataObj As New MSForms.DataObject
    Dim lngRow As Long
    Dim intCol As Integer
    Dim c As Range
    Dim strClip As String

    Const cStrNextCol As String = vbTab
    Const cStrNextRow As String = vbCrLf

    With Selection
        If Not TypeOf Selection Is Range Then
            On Error Resume Next
            .Copy
            Exit Sub
        End If

        If .Areas.Count = 1 Then
            For lngRow = 1 To .Rows.Count
                For intCol = 1 To .Columns.Count
                    strClip = strClip & _
                        Selection(lngRow, intCol).Value & cStrNextCol
                Next intCol
                strClip = Left(strClip, Len(strClip) - Len(cStrNextCol)) _
                    & cStrNextRow
            Next lngRow
        Else
            For Each c In .Cells
                strClip = strClip & c.Value & vbCrLf
            Next c
        End If
        strClip = Left(strClip, Len(strClip) - Len(cStrNextRow))
        DataObj.SetText strClip
        DataObj.PutInClipboard
    End With
End Sub

答案 1 :(得分:12)

我在翻译公司的Excel电子表格和我们的代码之间复制/粘贴了大量的翻译文件。每次都要删除换行符会让我不得不把它推到墙上。

最后,我复制了整张表并将其粘贴到新的Google文档电子表格中。然后我使用它来满足我的复制需求,因为它不会在Excel上复制新行。

希望有所帮助!

答案 2 :(得分:1)

我同意这很烦人,但不确定还有什么可做的。

Excel自动格式化单元格...制表符分隔的列,行分隔的行(单个单元格是1列的行)。

验证: 在.NET中,Clipboard.GetText()显示格式化已经在剪贴板中

这里有一些IronPython来说明:

# Copy some cells in Excel, then run the following
import sys, clr
clr.AddReference("System.Windows.Forms")
from System.Windows.Forms import Clipboard
Clipboard.GetText()