知识库 KB0156

无法将数据粘贴到 think-cell 数据表中,或格式丢失

问题表现

您的 Excel 工作簿 (.xlsx) 中包含数据,并希望将该数据复制/粘贴到 think-cell 图表的内部数据表中。粘贴数据时,出现以下问题的其中之一:

  • 显示错误消息:Microsoft Excel 无法粘贴数据
  • 只会粘贴空单元格。
  • 您的日期或数字格式丢失,例如 1/1/2012 变为 40909 或 $3.5 变为 3.5。
  • 粘贴后,百分比值的显示不正确。在百分比图中,图表布局可能会发生变化。
  • 虽然您已选中在顶部使用数据表填充选项,但是单元格颜色并未显示在图表中。

使用 think-cell 的 Excel 数据链接时,也会出现这些问题。

问题 1

若 .xlsx 工作簿包含的单元格样式超过大约 65490 种,可能会发生以上列出的任一问题。您可以在即时窗口中使用以下 VBA 命令检查单元格样式的数量:
print Activeworkbook.Styles.Count

对此进行检查的详细步骤如下:

  1. Alt+F11 打开 VBA 编辑器。
  2. 前往即时窗口。若该窗口不可见,您可以单击视图即时窗口以显示该窗口。
  3. 输入以下命令,然后按 Enter
    print Activeworkbook.Styles.Count

解决方案 1:清理受影响的工作簿

  • 将您的工作表复制到新的工作簿中

    Office 2013 和更新版本中,默认情况下,在工作簿之间复制工作表会导致无法累计未使用的单元格样式:

    • 选择工作簿中的所有表格:按住 SHIFT 键,然后单击第一个和最后一个工作表
    • 右键单击选择对象:移动或复制...到工作簿:(新工作簿)然后选中创建副本确定
    • 以新名称保存新工作簿

    Office 2007 和 2010 中,若将工作表复制到新工作簿中,会复制所有未使用的单元格样式。若要防止出现此情况,请先激活以下修补程序:

    若您的 Office 版本已完全更新,则可能已安装此修补程序。但是,您还必须激活此修复,其方式可以是使用 Microsoft 提供的 Fix it 解决方案,也可以是在注册表中按照以下 Microsoft 文章的说明而执行:

    若激活修补程序无效,请应用以上 Microsoft 文章中解决方案部分提及的更新。

  • 使用清理工具清理您的工作簿

    使用 Microsoft 在 KB213904 中建议的清理工具。使用 XLStyles 工具,单击获取 Excel 文件,选中将所有单元格样式强制设为“常规”,然后单击处理文件。Excel 打开清理后的文件时,使用新名称保存该文件。

  • 使用 VBA 宏从工作簿中删除自定义单元格样式

    使用 Alt+F11 打开 VBA 编辑器。选择您的工作簿,然后单击插入模块。然后粘贴以下宏的其中之一,按 F5 运行该宏:

    DeleteCustomStyles() 会删除您工作簿中的所有自定义单元格样式。

    Sub DeleteCustomStyles()
    Dim st As Style
    Dim i, i_cust As Long
    i_cust = 0
    For i = (ActiveWorkbook.Styles.Count) To 1 Step -1
    	With ActiveWorkbook.Styles(i)
    		If .BuiltIn = False Then
    			On Error Resume Next
    			.Locked = False
    			On Error GoTo 0
    			If Not .Locked Then
    				.Delete
    				i_cust = i_cust + 1
    			End If
    		End If
    	End With
    	If (i Mod 100) = 0 Then Debug.Print i
    Next
    MsgBox "Styles deleted: " & i_cust & " styles" & Chr(13) & "Styles left: " & ActiveWorkbook.Styles.Count
    End Sub

最佳解决方案是防止粘贴未使用的单元格样式,但是需要 Microsoft 修复 Excel 2007 和更新版本中的 Bug。到目前为止,Microsoft 认为商业影响尚未高到足以提供此修复。若贵公司有 Microsoft Office 支持合同,而且您希望联系 Microsoft 请求修复,可以参阅 Microsoft 案例编号 113012810172527、114021711190574 (Excel 2013)。

说明 1

将数据粘贴到 think-cell 数据表中或通过 Excel 数据链接传输数据时,使用的文件格式(Biff12/.xlsb 文件格式)支持大约 65490 种单元格样式。若从具有大量单元格样式的 .xlsx 工作簿将数据传输到 think-cell 数据表中,会丢失格式设置信息,或无法执行粘贴。

有些 .xlsx 工作簿因 Excel 中的 Bug 和有问题的代码设计而包含大量(数万种)单元格样式。促成因素还包括报告工具,这些工具有时会生成许多不必要的单元格样式。 在特定条件下,若在工作簿之间复制单元格或工作表,也会复制所有未使用的单元格样式。

  • 使用 Excel 2007 或 2010 将工作表复制到新工作簿中:
    右键点击工作表选项卡 → 移动或复制...到工作簿:(新工作簿)然后选中创建副本
  • 将单元格(甚至是单一单元格)复制/粘贴到其他工作簿中(在单独的 Excel 进程中)或复制/粘贴到 think-cell 的内部数据表中
    • 若要启动单独的 Excel 进程,请右键单击任务栏上的 Excel 符号,然后单击 Microsoft Excel 20 如何启动单独的 Excel 进程.
    • 在 Excel 2013 和更新版本中,同时按下 ALT 键以启动单独进程。对于消息您是否要启动新的 Excel 实例?,单击以确认。
    • think-cell 会受到影响,因为在单独的 Excel 进程中,我们的数据表基于 Excel 工作表。

若将单元格复制到同一 Excel 进程内的新工作簿中,不会复制未使用的单元格样式。

问题 2

可能会出现以下情况:最初可以成功将数据从 Excel 工作簿 (.xlsx) 复制/粘贴到 think-cell 图表的内部数据表中,但是随后尝试(甚至只是将空单元格)复制/粘贴到同一数据表时,会导致显示消息 Microsoft Excel 无法复制数据。在此情况下,以上问题表现部分中提及的其他问题不会出现。

在单独的 Excel 进程之间复制数据时,若源文件和目标文件中都存在同一名称的自定义表格样式,则会发生此问题。由于初次复制/粘贴也会复制所有自定义表格样式,因此随后的复制/粘贴尝试将失败。在不使用 think-cell 的情况下也可以重现该问题。

在不使用 think-cell 的情况下重现

  1. 打开两个 Excel 进程。若 Excel 已经打开,而您使用 Ctrl+N 创建新工作簿,则第二个工作簿将保留在同一个 Excel 进程中。
    • 若要启动单独的 Excel 进程,请右键单击任务栏上的 Excel 符号,然后单击 Microsoft Excel 20 如何启动单独的 Excel 进程.
    • 在 Excel 2013 和更新版本中,同时按下 ALT 键以启动单独进程。对于消息您是否要启动新的 Excel 实例?,单击以确认。
  2. 在已于第一个 Excel 进程中打开的工作簿内,前往 Excel主页样式套用表格格式新表格样式…确定。此操作将插入名为“表格样式 1”的新自定义表格样式。
  3. 将某单元格从包含“表格样式 1”的工作簿复制/粘贴到第二个 Excel 进程中的其他工作簿。第一次执行此操作有效。
  4. 再次将某单元格从包含“表格样式 1”的工作簿复制/粘贴到第二个 Excel 进程中的其他工作簿。第二次执行此操作失败,并显示消息 Microsoft Excel 无法粘贴数据。

解决方案 2

  • Excel 2007 和更旧版本不受此问题影响。
  • 在 Excel 2010 中,截止 2015 年 11 月,此问题仍出现。若贵公司有 Microsoft Office 支持合同,而且您希望联系 Microsoft 请求修复,可以参阅 Microsoft 案例编号 113012810172527, 114021711190574 (Excel 2013)。

    同时,您可以使用以下解决方法:

    • 以文本形式将数据粘贴到 think-cell 数据表中:

      think-cell 数据表粘贴更多(“粘贴”按钮旁的小三角形按钮) → 选择性粘贴...文本确定

    • 在 think-cell 的内部数据表中单击清除所有单元格的格式按钮。这会删除数据表中的所有自定义表格样式,随后的粘贴命令将至少有效一次。
  • Microsoft 已在 Excel 2013 中修复此问题。请安装 2014 年 6 月 10 日的 Microsoft Office 更新中的 KB2881014,或修补程序 KB2881042

分享