Я думаю, что это невозможно с компилятором и препроцессором. 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"
Было бы лучше оценить тип ячейки, а затем сделать то, что вам нужно. Я использую этот код для обработки данных ячейки (проверьте, что я даже обрабатываю пустые ячейки):
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;
}
Возможно, причина, по которой вы читаете пустые ячейки, связана с использованием правильного подкомпонента Apache POI для чтения файлов Excel. Используйте HSSF (Horrible SpreadSheet Format) для форматов XLS и XSSF (формат XML SpreadSheet) для форматов XLSX.
Что касается самого кода, вы можете уточнить свое логическое выражение. Теперь, когда вы используете этот или оператор (||
),
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 .
Было бы хорошо, если бы мы все знали, какой номер строки кода вызвал исключение.
Я подозреваю, что причиной вашей первой строки является код. Объектная ячейка может быть нулевой, а нулевой адрес не может быть преобразован в тип String. Вы можете проверить по коду.
Примечание. Хорошо, что код работает с Office 2010, но я думаю, что этот тип проблемы может произойти в любой версии Excel.