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 引号的处理方式。