Java Jxl чтение / запись в книгу - PullRequest
1 голос
/ 18 мая 2019

У меня есть таблица активов (excel) с десятичными числами (т. Е. 30.50), но я могу запустить приведенный ниже код только в том случае, если ячейки отформатированы как «без десятичных разрядов» (30), в противном случае это выдаст мне ошибку ниже.Ошибка отображает число с плавающей запятой как 30,50 с комер вместо оригинальных 30.50 !!!

Необходимо преобразовать строку rCell в плавающее.

rCell = readCell.getContents();
float testnumber = Float.parseFloat(rCell);

//////// ****** Читать актив EXCEL Файл **** ///////////

AssetManager assetManager = getAssets();
InputStream inputStream = null;
  try {
      inputStream = assetManager.open("MyFile.xls");
      } catch (IOException e) {
      e.printStackTrace();
      }
try {
    readAsset = Workbook.getWorkbook(inputStream);
    } catch (IOException e) {
    e.printStackTrace();
    } catch (BiffException e) {
    e.printStackTrace();
    }
Sheet s = readAsset.getSheet(0);

//////////////////////////////// ****** НАПИСАТЬ Excel на SD *** /////////////

    Fnamexls="testfile"  + ".xls";
    File sdCard = Environment.getExternalStorageDirectory();
    directory = new File (sdCard.getAbsolutePath() + "/MyFolder");
    directory.mkdirs();
    sdFile = new File(directory, Fnamexls);

        wbSettings = new WorkbookSettings();
        wbSettings.setLocale(new Locale("en", "EN"));
        try {
            wrWorkbook = Workbook.createWorkbook(sdFile, wbSettings);
            writeSheet = wrWorkbook.createSheet("First Sheet", 0);
            int row = s.getRows();
            int col = s.getColumns();
            //xx = "";
            for (int c = 0; c < col; c++) {
                for (int r = 0; r < row; r++) {
                    Cell z = s.getCell(c, r);
                    xx = z.getContents();
                    Label label4 = new Label(c, r, String.valueOf(xx));
                    try {
                        writeSheet.addCell(label4);
                    } catch (RowsExceededException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();

                    } catch (WriteException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();

                    }
                }
            }
            wrWorkbook.write();
            try {
                wrWorkbook.close();
            } catch (WriteException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();

            }
            //createExcel(excelSheet);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();

        }

    readTest();

public void readTest(){
Workbook m_workBook = null;
try {
    m_workBook = Workbook.getWorkbook(sdFile);
    } catch (IOException e) {
    e.printStackTrace();
    } catch (BiffException e) {
    e.printStackTrace();
    }
readSheet = m_workBook.getSheet(0);
int rRow = readSheet.getRows();
int rCol = readSheet.getColumns();
Cell readCell = readSheet.getCell(2, 0);
rCell = readCell.getContents();

float testnumber = Float.parseFloat(rCell); //Line error   

}

Ошибка консоли «Причина: java.lang.NumberFormatException: для входной строки:« 30,50 »в java.lang.FloatingDecimal.readJavaFormatString (FloatingDecimal.java:1306)»

1 Ответ

0 голосов
/ 20 мая 2019

Нашел это. Я установил локаль в Main () Locale.setDefault (новый Locale ("en", "US"));

...