Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Air_force
1 / 1 / 0
Регистрация: 24.05.2017
Сообщений: 10
1

Ниболее быстрый способ работы с файлом Excel (более 100 000 строк) Java

20.10.2017, 22:11. Просмотров 315. Ответов 5
Метки нет (Все метки)

Добрый вечер друзья!
В С# есть такая команда, которая одним махом кидает весь лист в двумерный массив(неопределенного типа), можете подсказать, есть ли какой аналог в Java этому:

var arrData = (object[,])xlSht.Range["A1:Z" + iLastRow].Value;

Сколько искал в инете все собирают данные через Apache poi, с помощью двойного цикла перебирая по одной ячейке, даже пробовать не хочу, потому как не верю, что это поможет быстро обработать таблицу, где 2 столбца и 130 000 строк. А обрабатывать всё, ещё и процу телефона. На ПК этот процесс занимал около минуты (когда к каждой ячейке обращался и меньше строк было), когда махом брал, то управлялся минимум в 30 раз быстрее.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.10.2017, 22:11
Ответы с готовыми решениями:

Наиболее быстрый способ работы с файлом Excel (около 20000 строк)
Здравствуйте ребята, хотел спросить у вас совета. Есть программа по распечатке...

Быстрый способ работы с recordset
Хочу поделится способом работы с recordset'ом, который работает примерно на 30%...

Самый быстрый способ склеивания строк
Закешировал файл в строку, десериализовал данные в массив экземпляров...

Самый быстрый способ масовой вставки строк
Допустим если надо вставить около тысячи строк, под одной - очень долго, может...

Быстрый способ подсчитать количество строк, удовлетворяющих условию
Здравствуйте, подскажите пожалуйста быстрый способ подсчитать количество строк...

5
Pablito
2767 / 2198 / 744
Регистрация: 12.05.2014
Сообщений: 7,710
Завершенные тесты: 1
21.10.2017, 14:43 2
если там xls формат, то считать можно будет только первые что-то около 65535 строк
если xlsx то apache poi под андроидом просто так не подключить - куча гимора и танцев с бубном

ну и самое главное - все это фигня насчет "быстрее диапазон взять"
при открытии простого xls файла, бОльшая часть времени тратится на создание воркбука, то есть на чтение и парсинг файла

я как-то читал xls файл около 1.7 мегабайт, количество строк по максимуму, так вот на Nexus 6 чтение/создание HSSFWorkbook занимало 5-7 сек
а проход по одной колонке меньше секунды
0
Air_force
1 / 1 / 0
Регистрация: 24.05.2017
Сообщений: 10
21.10.2017, 16:54  [ТС] 3
Не, нужен xlsx. Придется видимо танцевать...
0
Air_force
1 / 1 / 0
Регистрация: 24.05.2017
Сообщений: 10
26.10.2017, 14:06  [ТС] 4
Удалось мне справиться с xlsx на Android, но всё тоже самое, я не знаю как тебе удалось 5-7 сек. Мой nexus (эмулятор) на достаточно быстром компьютере считал 36602 строки и соответственно в 2х столбцах за примерно 30 минут (1.7 mb XLSX(хотя этот формат сильнее сжимает чем старый xls)). Несмотря на сжатие 5-7 сек и 30 мин рядом не стоят. Как я использовал перебор ячеек. Диапазон не знаю как тут взять, а мне нужно 120 000 строк получается телефон откладывать на 1,5- 2 часа (.
0
Pablito
2767 / 2198 / 744
Регистрация: 12.05.2014
Сообщений: 7,710
Завершенные тесты: 1
26.10.2017, 14:08 5
так я просто читал значения в массив, с ячейками никаких муток не было
0
Air_force
1 / 1 / 0
Регистрация: 24.05.2017
Сообщений: 10
26.10.2017, 23:32  [ТС] 6
Можешь показать? Я просто всё тупо в строку собирал, чтобы проверить.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
public class WorkExcel extends TestCase {
    public static String TAG ="myLog";
    public static int i=0, j=0;
    public static  String ReadExcel(String fileName) throws IOException {
        String result = "";
        XSSFWorkbook workbook = null;
        try {
            FileInputStream file = new FileInputStream(new File(fileName));
            // получаем экземпляр XSSFWorkbook для обработки xlsx файла
            workbook = new XSSFWorkbook(file);
        } catch (IOException e) {
            return  e.toString();
        }
        // выбираем первый лист для обработки
// нумерация начинается из 0
        XSSFSheet sheet = workbook.getSheetAt(0);
        XSSFRow row = sheet.getRow(0);
        // получаем Iterator по всем строкам в листе
        Iterator<Row> rowIterator = sheet.iterator();
        // получаем Iterator по всем ячейкам в строке
        while (rowIterator.hasNext()) {
            Log.d(TAG,Integer.toString(i) +"___"+Integer.toString(j));
            Row rows = rowIterator.next();
            Iterator<Cell> cells = rows.iterator();
 
            while (cells.hasNext()) {
                Log.d(TAG,Integer.toString(i) +"___"+Integer.toString(j));
                Cell cell = cells.next();
                int cellType = cell.getCellType();
                //перебираем возможные типы ячеек
                switch (cellType) {
                    case Cell.CELL_TYPE_STRING:
                        result += cell.getRichStringCellValue().getString() + "=";
                        break;
                    case Cell.CELL_TYPE_NUMERIC:
                        if (DateUtil.isCellDateFormatted(cell))
                            result += cell.getDateCellValue().toString();
                        else
                            result += "[" + Long.toString((long) cell.getNumericCellValue())  + "]";
                        break;
                    case Cell.CELL_TYPE_FORMULA:
                        //FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
 
                        //result += "[" + evaluator.evaluate(cell).getNumberValue() + "]";
                        result += "|";
                        break;
 
                    default:
                        result += "|";
                        break;
 
                }
                j++;
            }
            i++;
            result += "\n";
        }
        return result;
Добавлено через 9 часов 18 минут
Всё порешал и скорость огонь. Около 20 сек 120000 строк 2 столбца.

Помог пример из другой темы mumbapromo:
Apache POI, как прочитать *. xlsx 2007

Он сначала всё кидает в списочный массив, а затем оттуда забирает по типам.
1
26.10.2017, 23:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2017, 23:32

Каков самый быстрый способ узнать количество строк в оргомном текстовом файле в Windows?
Есть текстовый файл с кучей строк (размер файла ~ 1Гб). Как можно максимально...

Update более 100 000 записей занимает свыше 10 часов
Здравствуйте ув. форумчане и знатоки Delphi! Задача в общем такая...

Очень долго открывается RecordSet, более 100 000 записей.
Добрый день ! Может кто подскажет: Есть база в Access. Большая таблица (около...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru