我可以将非 unicode 数据类型写入 Excel 吗?

Posted

技术标签:

【中文标题】我可以将非 unicode 数据类型写入 Excel 吗?【英文标题】:Can I write non-unicode datatypes to Excel? 【发布时间】:2019-12-17 19:07:13 【问题描述】:

我有一个 ssis 包,它可以从 sql server 查询创建一个 excel 文件。问题是,除了 DT_WSTR 数据类型之外,我无法使用任何其他数据类型,即使在高级源和目标编辑器以及数据转换元素中也是如此。我目前的理解是 Excel 只接受 unicode 字符串作为输入。这是真的?真的没有办法插入数据并保留数据类型吗?或者,这可以通过 c# 脚本任务来完成吗?

附言我尝试使用正确的数据类型和虚拟数据将虚拟列插入到模板文件中,希望插入的行将遵循它之前行的数据类型。那没用。

【问题讨论】:

您的问题是您是否可以将 unicode 和非 unicode 字符串写入 Excel,还是您无法将整数/整数写入 Excel? 如果我尝试使用除 unicode 字符串之外的任何内容,则会在 excel 目标任务中出现数据转换错误。 【参考方案1】:

将非 unicode 字符串转换为 Excel 所需的 unicode 是无损的。

如果还没有,只需沿途施放它 (DT_WSTR, 255)。相应地调整长度。

几乎所有数据类型都可以转换为 Unicode DT_WSTR,除了 dt_image 和 dt_text。

Unicode 在内部使用两个字节来存储相同的字符。

当您打开 Excel 文件时,您应该可以看到您的非 unicode 字符串。


excel 驱动程序将接受以下类型:

数字 - 双精度浮点数 (DT_R8) 货币 - 货币 (DT_CY) 布尔 - 布尔 (DT_BOOL) 日期/时间 - 日期时间 (DT_DATE) 字符串 - Unicode 字符串,长度为 255 (DT_WSTR)

需要将列强制转换/转换为其中一种类型才能通过驱动程序。

https://docs.microsoft.com/en-us/sql/integration-services/load-data-to-from-excel-with-ssis?view=sqlallproducts-allversions

【讨论】:

在这种情况下,数据丢失不是问题。我只是想保留数据类型,以便可以在公式中使用数字/货币值并复制/粘贴。 查看更新的答案以获得支持的类型列表和可用于满足驱动程序要求的转换。

以上是关于我可以将非 unicode 数据类型写入 Excel 吗?的主要内容,如果未能解决你的问题,请参考以下文章

Python3 - 将非 ascii 字符替换为其 unicode 代表值? [复制]

C++ 文件 IO:读取和写入 16 位字

SSIS包写入CRM 2011数据类型错误

Unicode SQL 查询 W/ 参数而不是 N 前缀

MFC CEdit 将非 ascii 字符转换为 ascii

CMemFile 和 Unicode