X ++ SysExcelWorkbook.saveAs - изменить кодировку - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь конвертировать XLS в CSV, используя задание в AX2012. В моем 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 ++?

1 Ответ

0 голосов
/ 11 января 2019

Я не думаю, что вы можете сделать это без некоторых обходных путей, поскольку это выглядит как ограничение 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);

Я не уверен, действительно ли это решает проблему кодирования без тестирования. Я также хотел бы перепроверить, как обрабатываются одинарные / двойные кавычки.

...