Что вызывает неожиданный токен "=" внутри цикла for в моем скрипте Groovy? - PullRequest
0 голосов
/ 06 июня 2019

Я пытался настроить код с этого сайта , чтобы преобразовать таблицы в книге Excel в файлы CSV. Я сделал несколько небольших модификаций выше рассматриваемого сегмента и только добавил метку к этому сегменту, так как в противном случае он выдавал другую ошибку. Теперь я получаю неожиданную ошибку токена на первом "=" в моем цикле for:

.groovy: 21: unexpected token: = @ line 21, column 16.
       for (int r = 0, rn = sheet.getLastRowNum() ; r <= rn ; r++) {
              ^

1 error

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

#!/usr/bin/env groovy

@Grab(group='org.apache.poi', module='poi', version='4.1.0')

import org.apache.poi.xssf.usermodel.XSSFWorkbook
import org.apache.poi.ss.usermodel.DataFormatter

Workbook wb = new XSSFWorkbook(new File(this.args));
int sheetNo = Integer.parseInt(args[index++]);
FormulaEvaluator fe = null;
if ( index < args.length ) {
    fe = wb.getCreationHelper().createFormulaEvaluator();
}
DataFormatter formatter = new DataFormatter();
PrintStream out = new PrintStream(new FileOutputStream(csvFile), true, "UTF-8");

byte[] bom = [(byte)0xEF, (byte)0xBB, (byte)0xBF];
out.write(bom);
label:{
    Sheet sheet = wb.getSheetAt(sheetNo);
    for (int r = 0, rn = sheet.getLastRowNum() ; r <= rn ; r++) {
        Row row = sheet.getRow(r);
        if ( row == null ) { out.println(','); continue; }
        boolean firstCell = true;
        for (int c = 0, cn = row.getLastCellNum() ; c < cn ; c++) {
            Cell cell = row.getCell(c,    Row.MissingCellPolicy.RETURN_BLANK_AS_NULL);
            if ( ! firstCell ) out.print(',');
            if ( cell != null ) {
                if ( fe != null ) cell = fe.evaluateInCell(cell);
                String value = formatter.formatCellValue(cell);
                if ( cell.getCellTypeEnum() == CellType.FORMULA ) {
                    value = "=" + value;
                }
                out.print(encodeValue(value));
            }
            firstCell = false;
        }
        out.println();
    }
}

1 Ответ

1 голос
/ 06 июня 2019

просто разбить его на два утверждения:

int cn = row.getLastCellNum()
for (int c = 0 ; c < cn ; c++) {
  ...
...