Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 684
1

ListView + ViewPager как правильнее организовать экспорт в Excel?

16.01.2017, 12:41. Показов 1172. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!

1.) на каждой странице Pager'а свой список, как подготавливать данные (со всех страниц) для экспорта в Ecxel-файл?

2.) для экспорта юзер вызывает диалог со списком разделов где чекбоксами отмечает какие списки нужно экспортировать, далее собсно сам экспорт,

...arraylist каждой страницы писать в файл (так получается записать только первый, а как дописывать в этот же файл второй и последующие не понимаю)?

...или надо как-то сразу подготовить arraylist в который будут скопированы все выбранные списки, а потом уже в ecxel одним махом?



Помогите пожалуйста кто сталкивался ...

З.Ы. конечно больше интересует логика именно дописывания в файл.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.01.2017, 12:41
Ответы с готовыми решениями:

Скроллинг ViewPager-а как у ListView
Как сделать скроллинг у ViewPager-а по несколько элементов сразу, в зависимости от скорости жеста,...

ViewPager внутри ListView, Как вставить?
Здравствуйте. Есть задача, внутри ListView сделать айтемы, которые содержат ViewPager Вот фрагмент...

Как победить подтормаживание при листании ViewPager со списками listview?
Как победить подтормаживание при листании ViewPager со списками listview? если быстро листать...

ViewPager и ListView
Вообще пытаюсь сделать пролистывающиеся редактируемые списки. Для этого использую ViewPager и...

6
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 684
18.01.2017, 19:31  [ТС] 2
Dialog (кнопка Экспорт):
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
 bt1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                CreateRow createRow = new CreateRow();
                createRow.saveExcelFile(getActivity(),FILENAME_SD);
            }
        });


Класс CreateRow (создание ячеек и заполнение из ArrayList'оф):

Кликните здесь для просмотра всего текста
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
public class CreateRow {
    public static int end_section = 1;
    public static ArrayList<Product> arrayList = new ArrayList<Product>();
    public static ArrayList<Product> arrayList2 = new ArrayList<Product>();
 
    public static boolean saveExcelFile(Context context, String fileName) {
 
 
        arrayList =  OneFragment.products;
        arrayList2 = TwoFragment.products;
 
        boolean success = false;
 
        //New Workbook
        Workbook wb = new HSSFWorkbook();
 
        Cell c = null;
 
        //Cell style for header row
        CellStyle cs = wb.createCellStyle();
        cs.setFillForegroundColor(HSSFColor.LIME.index);
        cs.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
 
        //New Sheet
        Sheet sheet1 = null;
        sheet1 = wb.createSheet("Retail_Price");
 
//создание первой строки с названием колонок     
   Row row = sheet1.createRow(0);
 
        c = row.createCell(0);
        c.setCellValue("№");
        c.setCellStyle(cs);
 
        c = row.createCell(1);
        c.setCellValue("Name");
        c.setCellStyle(cs);
 
        c = row.createCell(2);
        c.setCellValue("Price");
        c.setCellStyle(cs);
 
        Row row2;
//заполнение из первого списка
        if (Export_dialog.selectingSection == 0) {
 
 
        // Generate item rows
        for (int i = end_section; i < arrayList.size(); i++) {
            row2 = sheet1.createRow(i);
            c = row2.createCell(0);
            c.setCellValue(String.valueOf(i));
            c.setCellStyle(cs);
 
            c = row2.createCell(1);
            c.setCellValue(arrayList.get(i).getName());
            c.setCellStyle(cs);
 
            c = row2.createCell(2);
            c.setCellValue(arrayList.get(i).getPrice());
            c.setCellStyle(cs);
            //  createRow1.CreateRo(c, sheet1, cs, arrayList);
           // Log.d("tagLog", "selectingSection = 0");
        }
 
            int var = end_section;
end_section= (var + arrayList.size())+1;
 
//заполнение из второго списка
        }else if (Export_dialog.selectingSection==1){
            for (int i = end_section; i < arrayList2.size(); i++) {
                row2 = sheet1.createRow(i);
                c = row2.createCell(0);
                c.setCellValue(String.valueOf(i));
                c.setCellStyle(cs);
 
                c = row2.createCell(1);
                c.setCellValue(arrayList2.get(i).getName());
                c.setCellStyle(cs);
 
                c = row2.createCell(2);
                c.setCellValue(arrayList2.get(i).getPrice());
                c.setCellStyle(cs);
                //  createRow1.CreateRo(c, sheet1, cs, arrayList);
                // Log.d("tagLog", "selectingSection = 0");
            }
            int var = end_section;                                  //попытка продолжить запись 
            end_section= (var + arrayList2.size())+1;       //начиная со строки окончания первого списка. 
        }
 
//размер колонок в строке
        sheet1.setColumnWidth(0, (15 * 60));
        sheet1.setColumnWidth(1, (15 * 500));
        sheet1.setColumnWidth(2, (15 * 500));
 
        // Create a path where we will place our List of objects on external storage
        // получаем путь к SD


на данный момент происходит перезапись ячеек первого списка вторым, т.к. не знаю как дописать, у кого какие мысли помогите пожалуйста?

Добавлено через 18 часов 23 минуты


Добавлено через 11 часов 24 минуты
ну дайте "наВодочку" ....
0
Модератор
3386 / 2158 / 352
Регистрация: 13.01.2012
Сообщений: 8,375
19.01.2017, 13:39 3
disx, по коду вроде бы диапазоны выводятся в файл только при своем выборе но никак не вместе - как они у вас перезаписываются?
0
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 684
19.01.2017, 16:28  [ТС] 4
vxg, может и не перезаписывается(это моя догадка), а записывается только последний, потому что после создания названий колонок, в xls-файле видны строки только из второго списка(arrayList2)..., как-то так...
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
19.01.2017, 16:38 5
Лучший ответ Сообщение было отмечено disx как решение

Решение

там с условиями лапша какая-то, статические переменные
я бы начал с того что выводил в лог значение end_section
1
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 684
21.01.2017, 11:51  [ТС] 6
vxg, Паблито немного подправил логику, действительно эта переменная брала значение из адаптера (по позиции) списка для выбора разделов. Ну и косяк был что она при каждой новой галочке заменялась новым значением. Сейчас отдельные переменные и условия все срабатывают. Напр. значение end_section первого листа 33, а второго 42, и данные из первого листа в xls-файле видны а второго нет. Хотя, если поставить везде в for (i=0, то видно что первый лист записался, а второй затер/переписал собой первые 8 строк.

да забыл упомянуть что пример брал отсюда - http://www.cuelogic.com/blog/c... n-android/ (там же ссылка на библиотеку).

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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
  //New Workbook
        Workbook wb = new HSSFWorkbook();
 
        Cell c = null;
 
        //Cell style for header row
        CellStyle cs = wb.createCellStyle();
        cs.setFillForegroundColor(HSSFColor.LIME.index);
        cs.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
 
        //New Sheet
        Sheet sheet1 = null;
        sheet1 = wb.createSheet("Retail_Price");
 
        // CreateRow createRow1 = new CreateRow();
        Row row = sheet1.createRow(0);
 
        c = row.createCell(0);
        c.setCellValue("№");
        c.setCellStyle(cs);
 
        c = row.createCell(1);
        c.setCellValue("Name");
        c.setCellStyle(cs);
 
        c = row.createCell(2);
        c.setCellValue("Price");
        c.setCellStyle(cs);
 
       
        if (selectingSection1==0) {
            // Generate item rows
            for (int i = end_section; i < arrayList.size(); i++) {
                row = sheet1.createRow(i);
                c = row.createCell(0);
                c.setCellValue(String.valueOf(i));
                c.setCellStyle(cs);
 
                c = row.createCell(1);
                c.setCellValue(arrayList.get(i).getName());
                c.setCellStyle(cs);
 
                c = row.createCell(2);
                c.setCellValue(arrayList.get(i).getPrice());
                c.setCellStyle(cs);
            }
            int var = end_section;
            end_section= (var + arrayList.size())+1;
            Log.d("tagLog", String.valueOf(end_section));
        }
 
        if (selectingSection2==1){
 
            for (int i = end_section; i < arrayList2.size(); i++) {
                row = sheet1.createRow(i);
                c = row.createCell(0);
                c.setCellValue(String.valueOf(i));
                c.setCellStyle(cs);
 
                c = row.createCell(1);
                c.setCellValue(arrayList2.get(i).getName());
                c.setCellStyle(cs);
 
                c = row.createCell(2);
                c.setCellValue(arrayList2.get(i).getPrice());
                c.setCellStyle(cs);
 
            }
            int var = end_section;
            end_section= (var + arrayList2.size())+1;
 
            Log.d("tagLog", String.valueOf(end_section));
        }
 
 
        sheet1.setColumnWidth(0, (15 * 60));
        sheet1.setColumnWidth(1, (15 * 500));
        sheet1.setColumnWidth(2, (15 * 200));
 
        // Create a path where we will place our List of objects on external storage
        // получаем путь к SD
Добавлено через 6 часов 6 минут
слегка додумываю:

Java
1
2
3
 for (int i = end_section; i < arrayList.size(); i++) {
               
                row = sheet1.createRow(i);
итак,
Java
1
end_section=1
(т.к.
Java
1
sheet1.createRow(0)
это строка названия колонок которая создается до цикла...,

создание следующих строк в цикле начинается со значением i=1 (OK),

НО в условии for дано
Java
1
i<arrayList.size();
т.е. из этого следует что первую запись с индексом 0 из arrayList цикл пропускает и пишет со второй и КАК с ЭТИМ БОРОТЬСЯ???

Добавлено через 17 часов 17 минут
рассуждать оно полезно, два оператора в цикле for еще никто не отменял:

Кликните здесь для просмотра всего текста
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
if (selectingSection1==0) {
            // Generate item rows
            int i,j;
            for (i = end_section, j=0; j < arrayList.size(); i++, j++) {
        
                row = sheet1.createRow(i);
                c = row.createCell(0);
                c.setCellValue(String.valueOf(j));
                c.setCellStyle(cs);
 
                c = row.createCell(1);
                c.setCellValue(arrayList.get(j).getName());
                c.setCellStyle(cs);
 
                c = row.createCell(2);
                c.setCellValue(arrayList.get(j).getPrice());
                c.setCellStyle(cs);
                //  createRow1.CreateRo(c, sheet1, cs, arrayList);
                 Log.d("tagLog", "selectingSection = 0");
                if (i==arrayList.size()){
                    break;
                }
            }
 
            int var = end_section;
            end_section= (var + arrayList.size())+1;
            Log.d("tagLog", String.valueOf(end_section));
        }


все работает, как хотел...

Добавлено через 2 часа 10 минут
но остался еще вопрос №1

1.) на каждой странице Pager'а свой список, как подготавливать данные (со всех страниц) для экспорта в Ecxel-файл?
т.е. данные в arrayList каждого фрагмента попадают когда я листаю ViewPager, т.е. когда фрагмент становится onResume() подгружается список из интернета, как загрузить данные в каждый arrayList без прорисовки(листания) каждой страницы (фрагмента со списком)?
0
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 684
23.01.2017, 22:05  [ТС] 7


Добавлено через 12 часов 11 минут
Решено, в отдельном потоке вызываю метод который заполняет arraylist'ы в doInBackground каждого фрагмента (предварительно получая объект фрагмента), а потом отправляю данные со всех (ну или только с выбранных) arraylist'оф "на экспорт" .
0
23.01.2017, 22:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.01.2017, 22:05
Помогаю со студенческими работами здесь

Задать позицию ListView в ViewPager
Добрый вечер! Столкнулся с проблемой обновления ListView, после нажатия на кнопку происходит...

Обновление фрагмента с ListView в ViewPager
Есть класс фрагмента, который заполняет адаптер: public class PageFragment extends Fragment...

Ошибка при инициализации ListView в ViewPager
Всем доброго времени суток. Столкнулся с проблемой, в простом примере создания ViewPager, все...

Экспорт в Excel из ListView
Ребят, делаю вот программку, типо промышленного калькулятора. Застопорился на 2-х моментах. 1....

Экспорт данных с listview в Excel
Приветствую. Есть на форме listView с таблицей, нужно ее в Ексель загнать. У меня есть код: ...

Как правильнее всего сделать ListView с поиском
Привет! Обычная ситуация. Есть ListView с большим количеством элементов и есть Текстовое поле...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru