【发布时间】:2021-07-15 14:52:40
【问题描述】:
我有一个 VBS 脚本,将 Excel 文件转换为 SQL 服务器调用的 csv 格式。它包含:
Set objExcel = CreateObject("Excel.Application
Set objBook = objExcel.Workbooks.Open(objFile.Path, , True)
objBook.Worksheets(i).Activate
objBook.SaveAs file_out_start & i & ".csv", 6, , , True, False, , , , , , True
这将返回一个以 ANSI 编码的 csv 文件。 为了进一步处理文件,我需要输出采用 UTF-8 编码。
按照 Microsoft 文档 here 和 here,我尝试将参数 6 更改为代表“UTF8 CSV”的 62。
通过此更改,脚本停止工作并退出并出现以下错误:
line: 36 (line of 'objBook.SaveAs')
error: The SaveAs method of the Workbooks object could not be executed. (translated)
Code: 800A03EC
source: Microsoft Excel
谁能帮忙解释为什么会这样? 如果无法直接使用 UFT-8 编码导出,是否有一种简单的方法可以在脚本中将文件转换为 UFT-8?
【问题讨论】:
-
为什么是 SQL Server 标签?这与 SQL Server 有什么关系?无论如何,您使用的脚本控制本地安装的 Excel 实例。那个实例有这样的选择吗?该文件绝对不使用 7 位 US-ASCII 代码页,它使用系统区域设置代码页,很可能是 Latin1。
-
如果文件是 ASCII,那么它也将是 UTF8。 UTF8 对前 128 个字符使用与 ASCII 完全相同的字节值。除此之外,它每个字符使用 2 个或更多字节。除非文件包含高于 0x7F 的字节,否则无法判断文件是使用 ASCII 还是 UTF8 创建的
-
@Panagiotis Kanavos 感谢您的快速回复。我使用了该标签,因为主要目标是将 Excel 文件转换为 UTF-8 格式的 csv,以便将数据从远程源导入我的 SQL Server。 (我是 Stack Overflow 的新手,如果我出错了,抱歉。)我知道 ASCII 和 UTF8 之间的关系,但看不到与我的问题的关系:我的文件导出为 ANSI(ASCII 的另一个扩展名)。将导出的文件导入我的 sql 服务器会产生特殊字符(ü、ä、ö、ß)的问题。您对如何解决这个问题或实现项目的更好方法有什么建议。
-
don't see the relation to my question相反,这是最重要的部分。您不使用 ANSI 或 ASCII。如果您的机器使用美国或西欧语言环境,您可能正在使用 Latin1。无论代码页如何,您都可以使用bcp工具、BULK INSERT命令或SSIS 将任何平面文件导入SQL Server。它不需要在特定的代码页中。您也可以使用 SSIS 直接从 Excel 导入。您还可以使用 ADO/OLEDB 从 Excel 中读取数据,就像它是一个表格一样。 Excel 在导入场景中既不需要也不使用 -
VBScript 基本上已经死了,几乎从未使用过。它从未真正成为一种脚本语言,并在 2006 年被 Powershell 取代,Powershell 建立在 .NET 之上,并且功能更强大。 Export-Csv 和 Import-CSV 等命令是内置的,而ImportExcel 等额外模块可以导入和导出 Excel 文件
标签: sql-server excel utf-8 vbscript ansi