• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Android excel poi

Object Storage Arubacloud
0 głosów
89 wizyt
pytanie zadane 5 czerwca 2018 w Java przez ozz Nowicjusz (120 p.)

Witam chciałem się poradzić bo bawię się z edycja excela przez apkę korzystając z poi, czy to jest w miarę znośny kawałek kodu? zwłaszcza chodzi mi o Stream

private static void readExcelFile(Context context, String filename, String data[][][]) {

    if (!isExternalStorageAvailable() || isExternalStorageReadOnly()) {
        Log.e(TAG, "Storage not available or read only");
        return;
    }

    try {
        // Creating Input Stream
        File file = new File(context.getExternalFilesDir(null), filename);
        FileInputStream myInput = new FileInputStream(file);

        // Create a POIFSFileSystem object
        POIFSFileSystem myFileSystem = new POIFSFileSystem(myInput);

        // Create a workbook using the File System
        HSSFWorkbook myWorkBook = new HSSFWorkbook(myFileSystem);

        // Get the first sheet from workbook
        HSSFSheet mySheet = myWorkBook.getSheetAt(0);

        Toast.makeText(context, "File open", Toast.LENGTH_LONG).show();

        // edit file
        Cell cell = null;
        HSSFRow row;
        for (int i = 0; i < 7; i++) {
            row = mySheet.getRow(i + 5);
            for (int day = 0; day < 7; day++) {
                if (data[0][i][day] != null) {
                    cell = row.getCell(0 + (day * 6));
                    cell.setCellValue(data[0][i][day]);
                }
                if (data[1][i][day] != null) {
                    cell = row.getCell(4 + (day * 6));
                    cell.setCellValue(data[1][i][day]);
                }
                if (data[2][i][day] != null) {
                    cell = row.getCell(5 + (day * 6));
                    cell.setCellValue(data[2][i][day]);
                }
            }
        }

//edit 2
        for (int rowIndex = 2; rowIndex < 4; rowIndex++) {
            row = mySheet.getRow(rowIndex);
            for (int cellDay = 0; cellDay < 5; cellDay++) {
                if (data[rowIndex + 1][0][cellDay] != null) {
                    cell = row.getCell(1 + (cellDay * 6));
                    cell.setCellValue(data[rowIndex + 1][0][cellDay]);
                }
            }
        }
        myInput.close();


        File file2 = new File(context.getExternalFilesDir(null), "Arkusz pracy.xls");
        FileOutputStream os = null;

        try {
            os = new FileOutputStream(file2);
            myWorkBook.write(os);
            Log.w("FileUtils", "Writing file" + file);
            Toast.makeText(context, "File ready ", Toast.LENGTH_SHORT).show();
            os.close();
        } catch (IOException e) {
            Log.w("FileUtils", "Error writing " + file, e);
        } catch (Exception e) {
            Log.w("FileUtils", "Failed to save file", e);
        } finally {
            try {
                if (null != os)
                    os.close();
            } catch (Exception ex) {
            }
        }

    } catch (Exception e) {
        e.printStackTrace();


    }
}

1 odpowiedź

+1 głos
odpowiedź 6 czerwca 2018 przez Tomasz90 Nałogowiec (25,140 p.)
Jak mam być szczery to nie. Sam fakt że metoda ma side effect (nazywa się readExcelFile a robi jakąś edycję to już jest problem. Dodatkowo długość metody, komentarze, zamiast ekstrakcji do osobnych metod, słaba obsługa wyjątków, nazwy zmiennych, operacje na jakichś liczbach, które kompletnie nic nie mówią o ile dokładnie nie zaczniesz kodu analizować.

Generalnie polecam Ci przeczytać książkę "Clean Code", bo można trochę się z niej nauczyć i uważam, że każdy kto programuje w Javie powinien ją przeczytać.
komentarz 6 czerwca 2018 przez RafalS VIP (122,820 p.)
Popieram każdy punkt. Dodam jeszcze, że z tą obsługą wyjątków pod koniec pomógłaby Ci konstrukcja try-with-resources.

Podobne pytania

0 głosów
0 odpowiedzi 115 wizyt
pytanie zadane 13 września 2023 w Java przez blofeld Użytkownik (700 p.)
+3 głosów
1 odpowiedź 56 wizyt
0 głosów
1 odpowiedź 100 wizyt

92,550 zapytań

141,392 odpowiedzi

319,520 komentarzy

61,935 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...