X++ SysExcelWorkbook.saveAs - 改变编码
X++ SysExcelWorkbook.saveAs - change encoding
我正在尝试使用 AX2012 中的作业将 XLS 转换为 CSV。我的 XLS 中有一些非 ASCII 字符,我需要了解如何设置 SysExcelWorkbook.saveAs 方法以使用特定编码(例如 UTF-8)。
static void ExcelToCsv(Args _args)
{
SysExcelApplication application;
SysExcelWorkbooks workbooks;
SysExcelWorkbook workbook;
FileName xlsFile, csvFile;
;
application = SysExcelApplication::construct();
application.displayAlerts(false);
workbooks = application.workbooks();
xlsFile = @"C:\test.xlsx";
csvFile = @"C:\result.csv";
workbooks.open(xlsFile);
workbook = workbooks.item(1);
workbook.saveAs(csvFile, 6);
// workbook.saveAs(resFile, 22);
// workbook.saveAs(resFile, 23);
// workbook.saveAs(resFile, 24);
application.quit();
}
上面的代码生成 CSV,但在文本编辑器中打开时,所有非 ASCII 字符都不会显示 属性。我希望我能够以编程方式为我的 CSV 文件选择编码或使用源 (XSL) 编码。有没有办法用 X++ 实现这个?
我认为如果没有一些解决方法,您将无法做到这一点,因为这似乎是一个 Excel 限制。如果你真的需要它,它是可行的。
它使用 Excel COM 对象来完成工作,您可以在此处查看参考资料,我在其中找不到任何指定编码的选项:
https://docs.microsoft.com/en-us/office/vba/api/excel.workbook.saveas
,尽管在 Powershell
而不是 X++
中,解决方案(我认为)是导出到 UnicodeText
而不是 CSV
,然后替换\t
输出文件中有 ,
。
看起来您可以通过对代码进行以下更改来输出到 UnicodeText
,然后您可以使用其他一些字符串替换来更新最终文件。
#Excel
// workbook.saveAs(csvFile, 6); // 6 == #xlCSV
workbook.saveAs(csvFile, #xlUnicodeText);
未经测试,我不确定这是否真的解决了您的编码问题。我还想仔细检查 single/double 引号的处理方式。
我正在尝试使用 AX2012 中的作业将 XLS 转换为 CSV。我的 XLS 中有一些非 ASCII 字符,我需要了解如何设置 SysExcelWorkbook.saveAs 方法以使用特定编码(例如 UTF-8)。
static void ExcelToCsv(Args _args)
{
SysExcelApplication application;
SysExcelWorkbooks workbooks;
SysExcelWorkbook workbook;
FileName xlsFile, csvFile;
;
application = SysExcelApplication::construct();
application.displayAlerts(false);
workbooks = application.workbooks();
xlsFile = @"C:\test.xlsx";
csvFile = @"C:\result.csv";
workbooks.open(xlsFile);
workbook = workbooks.item(1);
workbook.saveAs(csvFile, 6);
// workbook.saveAs(resFile, 22);
// workbook.saveAs(resFile, 23);
// workbook.saveAs(resFile, 24);
application.quit();
}
上面的代码生成 CSV,但在文本编辑器中打开时,所有非 ASCII 字符都不会显示 属性。我希望我能够以编程方式为我的 CSV 文件选择编码或使用源 (XSL) 编码。有没有办法用 X++ 实现这个?
我认为如果没有一些解决方法,您将无法做到这一点,因为这似乎是一个 Excel 限制。如果你真的需要它,它是可行的。
它使用 Excel COM 对象来完成工作,您可以在此处查看参考资料,我在其中找不到任何指定编码的选项: https://docs.microsoft.com/en-us/office/vba/api/excel.workbook.saveas
Powershell
而不是 X++
中,解决方案(我认为)是导出到 UnicodeText
而不是 CSV
,然后替换\t
输出文件中有 ,
。
看起来您可以通过对代码进行以下更改来输出到 UnicodeText
,然后您可以使用其他一些字符串替换来更新最终文件。
#Excel
// workbook.saveAs(csvFile, 6); // 6 == #xlCSV
workbook.saveAs(csvFile, #xlUnicodeText);
未经测试,我不确定这是否真的解决了您的编码问题。我还想仔细检查 single/double 引号的处理方式。