【问题标题】:Paste SQL Query output with line breaks into single Excel cell将带有换行符的 SQL 查询输出粘贴到单个 Excel 单元格中
【发布时间】:2018-03-06 19:31:32
【问题描述】:

我正在尝试编写从多个字段中提取数据并将其显示在单个字段中但在多行上的 SQL 代码。目标是输出到 Excel,在单个单元格中保留多行。我们当前的过程只是使用 Excel 将两个字段连接到一个带有回车符的单元格中,但如果可能的话,我希望 SQL 这样做。

例如:

DECLARE @text NVARCHAR(100)
SET @text = 'This is line 1.' + CHAR(13)  + 'This is line 2.'
print @text

显示这个:

这是第 1 行。 这是第 2 行。

更改为选择:

DECLARE @text NVARCHAR(100)
SET @text = 'This is line 1.' + CHAR(13) + 'This is line 2.'
select @text

显示这个:

这是第 1 行。这是第 2 行。

然后我想将该输出复制并粘贴到 Excel 中,并将数据显示在一个单元格中,这样就可以在一个单元格中:

这是第 1 行。 这是第 2 行。

【问题讨论】:

    标签: sql excel sql-server-2008


    【解决方案1】:

    在您的 SQL 查询中,不要使用回车符,而是使用:

       " & CHAR(10) & "
    

    让列以等号双引号开头,并以双引号结尾。因此,SQL 的输出将是:

    ="This is line 1." & CHAR(10) & "This is line 2."
    

    把它放到 Excel 中。这看起来很混乱,直到您确保在“设置单元格格式”下选中了“换行文本”,然后回车符将出现在单元格内。

    【讨论】:

      【解决方案2】:

      您会在第一个 sn-p 中看到换行符,因为您正在查看 Management Studio 中的消息窗口。该代码没有结果。您在第二个 sn-p 中看到的是 Management Studio 如何向您显示结果。将其视为数据的调试视图。 Management Studio 不是报告工具。 char(13)存在于原始数据中;它只是没有在此视图中显示给您。

      但是,仍然存在三个问题。

      第一个问题是如何将数据导入 Excel。如果这是一个 VBA 宏或通过库直接创建 Excel 原生文件,那么您可能没问题。其他选项都有问题:

      • 如果您复制/粘贴,您将从不存在换行符的调试视图中复制。
      • 如果您正在运行创建 CSV 文件或类似文件的程序,则您依赖 Excel 的 CSV 解析器,它不太可能很好地处理换行符。
      • 如果您在 Management Studio 中使用“结果到文本”或“结果到文件”功能,字符就在那里,但您还要处理一些 Excel 不会自动处理的额外页眉和页脚文本(尽管您可以将其用作复制/粘贴源)。

      对于第二个问题,即使在某些情况下您有char(13),这在 Windows 系统上也只是换行的一半。您还需要一个额外的 CHAR(10) 才能在某些情况下显示它,例如:

      SET @text = 'This is line 1.' + char(13) + CHAR(10) + 'This is line 2.'
      

      最后一个问题是,即使换行符确实存在,Excel 是否也会遵守。 Excel 单元格不喜欢换行符。它希望您在新行中拥有此类数据。打开一个新的空白工作表,让我知道您甚至在同一个单元格中手动输入两行文本取得了多大的成功。您可能需要明确告诉 Excel 将文本换行,或更改默认视图。

      【讨论】:

      • 感谢 Joel 的详尽解释。我正在使用具有报告生成器的第 3 方应用程序,但非常有限,所以大部分时间我直接使用 SQL 构建和运行报告,然后将结果复制/粘贴到 Excel 以发送给其他员工与他们一起工作更多的。我刚刚开始使用 SSRS 以及一些预格式化。
      【解决方案3】:

      我发现上面的@tysonwright 答案既聪明又有帮助,但对我来说,即使我粘贴了值,CHAR(10) 也会导致两个“换行符”(ALT-Enter)出现在包装的单元格中。

      所以,我解决了如下:

      用管道(或您选择的任何唯一字符)替换 CRLF 并删除任何重复项的 SQL:

       SELECT replace(notes2,'||','|') as Notes2 from
          (
          SELECT replace(notes,char(13)+char(10),'|') as Notes2
          FROM   mytable
          ) z
      

      然后在 EXCEL 中,查找并替换管道“|”到按How to Replace Text with NewLine 输入为 CTRL-SHIFT-J 的换行符

      这使得换行的文本看起来像是使用换行符 (ALT-Enter) 输入的,而我无法使用 char(13)、char(10) 的任何组合来完成。

      它可能可以在 VBA 或公式中使用 vblf 替换/替换来完成,但我没有尝试过。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-12
        • 1970-01-01
        • 2017-10-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多