Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 25.02.2014
Сообщений: 17
1

Как прочитать данные из двух файлов Excel?

27.08.2014, 13:41. Показов 2265. Ответов 5
Метки нет (Все метки)

Всем привет) Ребята, нужна ваша помощь! Есть два файла excel, у каждого файла есть две колонки мне надо считать данные из обеих файлов и распихать их по двум HashMap и потом эти HashMap сравнить между собой на передмет различия данных. Вопрос в чем, каким образом можно прочитать данные из двух файлов одновременно? Вот мой метод который выдирает данные из одного файла
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
public void readSourceFile(String fileName) throws FileNotFoundException, IOException {
        File inputFile = new File(fileName);
        if (!inputFile.exists()) {
            return;
        }
        else {
            try {
                is = new FileInputStream(fileName);
                wb = new HSSFWorkbook(is);
                Sheet sh = wb.getSheetAt(0);
                Iterator<Row> it = sh.iterator();
                while (it.hasNext()) {
                        Row row = it.next();
                        Iterator<Cell> cells = row.iterator();
                        while (cells.hasNext()) {
                            Cell cell = cells.next();
                            int cellType = cell.getCellType();
                            switch (cellType) {
                                case Cell.CELL_TYPE_STRING:
                                    name = cell.getStringCellValue();
                                    break;
                                case Cell.CELL_TYPE_NUMERIC:
                                    count = (int) cell.getNumericCellValue();
                                    break;
                            }
                        }
                        map1.put(name, count);
                    }
                }
            catch (Exception e) {
                e.printStackTrace();
            }
            finally {
                if (is != null) {
                    is.close();
                }
            }
            
        }
    }
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.08.2014, 13:41
Ответы с готовыми решениями:

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

Как прочитать данные из файлов бд?
Jira Software была установлена ​​на Windows Server 2003 (x86) с подключением к базе данных...

Как правильнее прочитать данные из Excel в 1с?
как правильнее передать данные из файла формата ексель в 1с? поиском пользовался, но он выдал...

Как из Delphi прочитать данные из Excel-файла?
Субж. Если можно, по подробнее.

5
Эксперт Java
4077 / 3811 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
27.08.2014, 15:14 2
Deniss400, так и запустите ваш метод два раза? Или я что-то не понимаю...
1
0 / 0 / 0
Регистрация: 25.02.2014
Сообщений: 17
27.08.2014, 15:23  [ТС] 3
Да, точно)) Сразу не подумал. Спасибо! А можно еще один вопрос, у меня данные из двух excel записывает в две разные hashmap, мне надо сравнить эти две hashmap между собой по ключу и по значению и вывести все несовпадения. Я начал придумывать велосипед, но работает все плохо. Можете поправить мой код чтоб он правильно сравнивал обе hashmap и выводил все несоответсвтия? Вот мой код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public void compareData(Map<String, Integer> m1, Map<String, Integer> m2) {
        int i = 0;
        
        for (Map.Entry<String, Integer> entry1 : m1.entrySet()) {
            i++;
            //System.out.println(entry1.getKey()+"== "+entry1.getValue());
            //System.out.println("1");
            for (Map.Entry<String, Integer> entry2 : m2.entrySet()) {
                //int d = 1;
                //if (d == i){
                    //System.out.println(entry2.getKey()+"== "+entry2.getValue());
                if (entry1.getKey() == entry2.getKey() && entry1.getValue() == entry2.getValue()) 
                    break;  
                else{
                    System.out.println(entry1.getKey()+"== "+entry2.getKey()+"   "+entry1.getValue()+"   "+entry2.getValue());
                break;
                }
                //}
                //d++;
            }
        }
        }
    }
0
0 / 0 / 0
Регистрация: 25.02.2014
Сообщений: 17
02.09.2014, 12:26  [ТС] 4
Здравствуйте товарищи программисты! Мне поять нужен ваш совет. У меня есть код, который считывает данные из двух Excel файлов, сравнивает данные этих файлов и выводит различие. Все бы хорошо, код работает, но у меня выскакивает java.lang.NullPointerException
at qa.test.excel.ExcelReaderWriter.readSourceFile(ExcelReaderWr iter.java:59)
at qa.test.excel.ExcelReaderWriter.main(ExcelReaderWriter.java: 35).
Причем я разобрался почему именно так происходит, потому что мой цикл хватает лишнюю строку Excel. Я не могу понять как мне переделать мой цикл, чтоб не появлялось исключение, чтоб цыкл не хватал лишнюю строку. Буду благодарен за помощь.
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
package qa.test.excel;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
 
public class ExcelReaderWriter {
        
    private HSSFWorkbook wb = null;
    private InputStream is = null;
    private static HashMap<String, Object> map1 = null; 
    private static HashMap<String, Object> map2 = null; 
    private static ArrayList<HashMap<String, Object>> list1 = null; 
    private static ArrayList<HashMap<String, Object>> list2 = null; 
    
    public ExcelReaderWriter () {
        
        this.map2 = new HashMap<String, Object>();
        this.list1 = new ArrayList<HashMap<String, Object>>();
        this.list2 = new ArrayList<HashMap<String, Object>>();
    }
    
    public static void main (String [] args) throws IOException {
        ExcelReaderWriter rw = new ExcelReaderWriter();
        rw.readSourceFile("D://1.xls", list1, map1);
        rw.readSourceFile("D://2.xls", list2, map2);
        rw.compareData(list1, list2);
    }
    
    public void readSourceFile(String fileName, ArrayList<HashMap<String, Object>> data, HashMap<String, Object> temp) throws IOException {
        File inputFile = new File(fileName);
        if (!inputFile.exists()) {
            return;
        }
        else {
            try {
                    is = new FileInputStream(fileName);
                    wb = new HSSFWorkbook(is);
                    Sheet sh = wb.getSheetAt(0);
                    List<String> headers = new ArrayList<String>();
                    Row row = sh.getRow(0);
                    for(Cell cell : row){
                        if (cell.getCellType() != Cell.CELL_TYPE_BLANK) {
                            headers.add(cell.getStringCellValue());
                        }
                    }
                    for(int i = 1; i < sh.getPhysicalNumberOfRows(); i++) {
                        temp = new HashMap<String, Object>();
                        row = sh.getRow(i);
                        for(Cell cell : row){
                            if (cell.getCellType() == Cell.CELL_TYPE_BLANK) { 
                                break;
                            }
                            if(cell.getCellType() == Cell.CELL_TYPE_STRING) {
                                temp.put(headers.get(cell.getColumnIndex()), cell.getStringCellValue());
                            }
                            else
                                temp.put(headers.get(cell.getColumnIndex()), cell.getNumericCellValue());
                        }
                        data.add(temp);
                    }
                }
            catch (Exception e) {
                e.printStackTrace();
            }
            finally {
                if (is != null) {
                    is.close();
                }
            }
            
        }
    }
        
    public void compareData(ArrayList<HashMap<String, Object>> list1, ArrayList<HashMap<String, Object>> list2) {
        int size = Math.max(list1.size(), list2.size());
        for(int i = 0; i < size; i++) {
            Map<String, Object> row1 = null;
            Map<String, Object> row2 = null;
            if(list1.size() > i) {
                row1 = list1.get(i);
            }
            if(list2.size() > i) {
                row2 = list2.get(i);
            }
            if(row1 != null && row2 != null) {
                compareRow(row1, row2);
            }
        }
    }
 
    private void compareRow(Map<String, Object> row1, Map<String, Object> row2) {
        List<String> headers1 = new ArrayList<String>();
        List<String> headers2 = new ArrayList<String>();
        for(Map.Entry<String, Object> row : row1.entrySet()){
            headers1.add(row.getKey());
        }
        for(Map.Entry<String, Object> row : row2.entrySet()){
            headers2.add(row.getKey());
            }
            for(Map.Entry<String, Object> row : row1.entrySet()){
                String header = row.getKey();
                if(!row1.get(header).equals(row2.get(header))) {
                    System.out.println("First value: [" + row1.get(header) +"] second value [" + row2.get(header) + "]" + " - mismatch data");
            }
        }
    }
}
0
633 / 525 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
02.09.2014, 20:08 5
Запускай
Java
1
for (Cell cell : row)
только при условии, что row != null
1
0 / 0 / 0
Регистрация: 25.02.2014
Сообщений: 17
02.09.2014, 22:38  [ТС] 6
Спасибо большое, aleksandy)) все работает отлично))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.09.2014, 22:38

Как из EXcel прочитать данные из таблицы БД MS SQL SErver?
Как из EXcel прочитать данные из таблицы БД MS SQL SErver. ВОобще такое возможно?

Как перенести данные с двух файлов в третий?
Всем привет. есть 2 файла с данными. третий файл консолидирует данные из 2х файлов. Задача...

Как вывести в QReport данные из двух файлов одной БД?
Кто знает как вывисти в QReport данные из двух файлов одной БД( Фамилия в одном файле, а разные...

Получить доступ к листу Excel и прочитать данные
На форме два текстбокса один баттон и один лабел. Как сделать так: ввожу имя в текстбокс1,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru