2016-12-04 2 views
0

Я читаю электронную таблицу Google, как описано в Java QuickstartNumberFormat Google Spreadsheet API v4 Java

https://developers.google.com/sheets/quickstart/java

Quickstart explaines как считывать данные из диапазона поддавки

..... 
String range = "Class Data!A2:E"; 
ValueRange response = service.spreadsheets().values() 
    .get(spreadsheetId, range) 
    .execute(); 

List<List<Object>> values = response.getValues(); 

NumberFormat nf = NumberFormat.getInstance(Locale.GERMAN); 

for (int i = 1; i < values.size(); i++) { 
    List row = values.get(i); 
    double l1 = nf.parse(row.get(1).toString()).doubleValue(); 
.... 

, как вы может видеть, что я читаю двойные значения из ответа

Я ожидаю выделенного формата для двойных значений (например, 12,34 инст. d от 12.34)

Могу ли я уже передать в качестве параметра запрос номерного формата, который я ожидаю? Что-то вроде:

service.spreadsheets().values().get(spreadsheetId, range).myNumberFormat("##,#####").execute() 

С уважением

Майкл

ответ

1

Ответ вы получите от таблицы, по умолчанию, уже отформатирован так, как это в таблице. Ваш вызов nf.parse(..) переводится с этой форматированной версии в родной Java-тип, поэтому вы теряете форматирование.

Если вы хотите получить необработанные значения (так что вам не нужно проводить парсинг локально), вы можете установить valueRenderOption на UNFORMATTED_VALUE. См. this sample для получения дополнительной информации.

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

Если вы хотите, чтобы определенный вид форматирования еще не был в вашей таблице, извлеките необработанное значение (используя значение UNFORMATTED_VALUE valueRenderOption) и локально используйте свой NumberFormat для перевода в этот формат. В качестве альтернативы установите требуемое форматирование в электронной таблице и просто извлеките значения и не переубирайте их.

Смежные вопросы