Как получить номер из Excel в научной нотации? [Дубликат]

Я думаю, что это невозможно с компилятором и препроцессором. gcc позволяет это:

#define _STRGF(x) # x
#define STRGF(x) _STRGF(x)

    printk ( MODULE_NAME " built " __DATE__ " at " __TIME__ " on host "
            STRGF(
#               define hostname my_dear_hostname
                hostname
            )
            "\n" );

Но, к сожалению, это не так:

#define _STRGF(x) # x
#define STRGF(x) _STRGF(x)

    printk ( MODULE_NAME " built " __DATE__ " at " __TIME__ " on host "
            STRGF(
#               include "/etc/hostname"
            )
            "\n" );

Ошибка:

/etc/hostname: In function ‘init_module’:
/etc/hostname:1:0: error: unterminated argument list invoking macro "STRGF"
1
задан creemama 3 June 2012 в 17:35
поделиться

3 ответа

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

switch (cell.getCellType()) {
    case Cell.CELL_TYPE_STRING:
        str = cell.toString().trim();
        break;
    case Cell.CELL_TYPE_NUMERIC:
        if (DateUtil.isCellDateFormatted(cell)) {
            //you should change this to your application date format
            objSimpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
            str = objSimpleDateFormat.format(cell.getDateCellValue());
        } else {
            num = cell.getNumericCellValue();
            str = String.valueOf(cell.getNumericCellValue());
        }
        break;
    case Cell.CELL_TYPE_BLANK:
        str = "";
        break;
    case Cell.CELL_TYPE_ERROR:
        str = "";
        break;
    case Cell.CELL_TYPE_BOOLEAN:
        str = String.valueOf(cell.getBooleanCellValue());
    break;
}
2
ответ дан Luiggi Mendoza 17 August 2018 в 17:29
поделиться
  • 1
    @luigi Спасибо за ответ. Я скоро проверю это. – Nick 3 June 2012 в 08:45
  • 2
    @Nick, Скажите, работает ли код выше для вас. Если да, то я не буду предоставлять более полный образец кода. В принципе, я думаю, что этот код должен работать. – The Original Android 3 June 2012 в 20:06

Возможно, причина, по которой вы читаете пустые ячейки, связана с использованием правильного подкомпонента Apache POI для чтения файлов Excel. Используйте HSSF (Horrible SpreadSheet Format) для форматов XLS и XSSF (формат XML SpreadSheet) для форматов XLSX.


Что касается самого кода, вы можете уточнить свое логическое выражение. Теперь, когда вы используете этот или оператор (||),

  • , первая часть вашего оператора if будет выполняться, если str != null и
  • часть else вашего оператора if будет выполняться, если str == null.

Первая часть оператора if вызовет NumberFormatException при вызове Double.parseDouble, если str не может быть проанализирован как число.

Возможно, следующий фрагмент кода поможет вам:

if (str == null || str.trim().isEmpty()) {
    // handle null and empty strings
} else if (cell.getType() == Cell.CELL_TYPE_NUMERIC) {
    System.out.println("Cell is numeric.");
    num = cell.getNumericCellValue();
} else {
    // If the cell is not numeric, Double.parseDouble(str) 
    // will most likely throw a NumberFormatException
}

Чтобы узнать больше о Cell, прочитайте его Javadoc .

3
ответ дан creemama 17 August 2018 в 17:29
поделиться
  • 1
    Исключение NumberFormatException - это подсказка, поэтому я дал вам предварительный голос. – The Original Android 1 June 2012 в 22:30
  • 2
    В более гибких обстоятельствах ваш код будет полезен для меня, но проблема в том, что я не знаю, почему theyre читается как пустой или пустой, и я не знаю, как с ними справиться. Они не должны считаться нулевыми или пустыми, и видны листы, и официально данные в ячейках являются строками, что-то похожее на «0,205». вновь и вновь. – Nick 1 June 2012 в 22:38
  • 3
    @Nick, этот код работает: double num = Double.parseDouble («0.205»); Попробуйте! – The Original Android 1 June 2012 в 23:50
  • 4
    О, и проверьте формат или тип ячейки. Убедитесь, что это строка или плавающая точка, а не формула. Вот почему код выше проверяет CELL_TYPE_NUMERIC. Но тип ячейки также может быть строкой, и это не должно быть проблемой. Теперь ты понимаешь? – The Original Android 1 June 2012 в 23:55
  • 5
    @TheOriginalAndroid, который работает с кодами, однако проблема заключается в том, что строка, которая анализируется, пуста, хотя я отправляю ее данные из ячейки, которая, я уверен, не пуста. – Nick 3 June 2012 в 08:45

Было бы хорошо, если бы мы все знали, какой номер строки кода вызвал исключение.

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

Примечание. Хорошо, что код работает с Office 2010, но я думаю, что этот тип проблемы может произойти в любой версии Excel.

0
ответ дан The Original Android 17 August 2018 в 17:29
поделиться
  • 1
    Я просто обновил основную запись, чтобы определить, где находится ошибка. Хотя ошибка не отражает всю проблему. Почему мои ячейки читаются как пустые, когда они действительно не пустые? – Nick 1 June 2012 в 22:39
Другие вопросы по тегам:

Похожие вопросы: