Я давно хотел изучить метод использования Java для работы с Excel, мне сегодня нечего делать, поэтому я просто немного изучил и обобщил. Чтобы использовать Java для работы с Excel, существует инструмент с открытым исходным кодом — jxl.jar, который можно загрузить по адресу http://sourceforge.net/projects/jexcelapi/files/.
1. Прочитайте содержимое файла Excel.
Скопируйте код кода следующим образом:
/** *//**Читать содержимое файла Excel
* @param file файл для чтения
* @возвращаться
*/
общедоступная статическая строка readExcel (файл-файл)...{
StringBuffer sb = новый StringBuffer();
Рабочая книга wb = null;
пытаться...{
//Создаем объект рабочей книги
wb=Workbook.getWorkbook(файл);
} catch (BiffException e) ...{
е.printStackTrace();
} catch (IOException e) ...{
е.printStackTrace();
}
если (wb == ноль)
вернуть ноль;
//После получения объекта Workbook через него можно получить объект Sheet (рабочий лист)
Лист [] лист = wb.getSheets();
if(sheet!=null&&sheet.length>0)...{
//Проходим по каждому листу
for(int i=0;i<sheet.length;i++)...{
//Получаем количество строк на текущем листе
int rowNum = лист[i].getRows();
for(int j=0;j<rowNum;j++)...{
//Получаем все ячейки текущей строки
Cell[] cell = лист[i].getRow(j);
if(cells!=null&&cells.length>0)...{
//Проходим по каждой ячейке
for(int k=0;k<cells.length;k++)...{
//Читаем значение текущей ячейки
Строка cellValue = cell[k].getContents();
sb.append(cellValue+" ");
}
}
sb.append(" ");
}
sb.append(" ");
}
}
//Окончательно закрываем ресурс и освобождаем память
вб.закрыть();
вернуть sb.toString();
}
2. Записать в файл Excel
Здесь есть много форматов, таких как выделение текста жирным шрифтом, добавление определенных цветов и т. д. Вы можете обратиться к API jxl.
Скопируйте код кода следующим образом:
/**Создать файл Excel
* @param fileName Имя создаваемого файла Excel.
*/
public static void writeExcel(String fileName)...{
WritableWorkbook wwb = null;
пытаться...{
//Сначала используем фабричный метод класса Workbook для создания объекта рабочей книги (Workbook), доступного для записи.
wwb = Workbook.createWorkbook(новый файл(имя_файла));
} catch (IOException e) ...{
е.printStackTrace();
}
если(wwb!=ноль)...{
//Создаем рабочий лист, доступный для записи
//Метод createSheet книги имеет два параметра: первый — это имя листа, а второй — положение листа в книге.
WritableSheet ws = wwb.createSheet("лист1", 0);
//Начинаем добавлять ячейки ниже
for(int i=0;i<10;i++)...{
for(int j=0;j<5;j++)...{
//Здесь следует отметить, что в Excel первый параметр представляет столбец, а второй параметр представляет строку.
Label labelC = new Label(j, i, "Это строка "+(i+1)+", столбец "+(j+1)+"");
пытаться...{
//Добавляем сгенерированные ячейки на лист
ws.addCell(labelC);
} catch (RowsExceededException e) ...{
е.printStackTrace();
} catch (WriteException e) ...{
е.printStackTrace();
}
}
}
пытаться...{
//Запись из памяти в файл
ввб.писать();
//Закрываем ресурсы и освобождаем память
ввб.закрыть();
} catch (IOException e) ...{
е.printStackTrace();
} catch (WriteException e) ...{
е.printStackTrace();
}
}
}
Примечание. Если вы хотите записать содержимое в существующий Excel, вам необходимо выполнить следующие действия:
Скопируйте код кода следующим образом:
Книга WritableWorkbook = null;
пытаться...{
// Excel получает файл
Рабочая книга wb = Workbook.getWorkbook(new File("D:/test.xls");
// Открываем копию файла и записываем указанные данные обратно в исходный файл
book = Workbook.createWorkbook(new File("D:/test.xls"), wb);
//Добавляем рабочий лист
WritableSheet лист = book.getSheet("лист1");
sheet.addCell(new Label(8,3, "Что-то добавлено в строку 3, столбец 8"));
//TODO Следующие части опущены
}catch(Исключение е)...{
е.printStackTrace();
}
3. Узнайте, содержит ли файл Excel определенное ключевое слово.
Скопируйте код кода следующим образом:
/** Проверить, содержит ли определенный файл определенное ключевое слово
* @param file файл для поиска
* @param keyWord Ключевое слово для поиска.
* @возвращаться
*/
public static boolean searchKeyWord(File file,String keyWord)...{
логическое разрешение = ложь;
Рабочая книга wb = null;
пытаться...{
//Создаем объект рабочей книги
wb=Workbook.getWorkbook(файл);
} catch (BiffException e) ...{
вернуть разрешение;
} catch (IOException e) ...{
вернуть разрешение;
}
если (wb == ноль)
вернуть разрешение;
//После получения объекта Workbook через него можно получить объект Sheet (рабочий лист)
Лист [] лист = wb.getSheets();
логическое значение BreakSheet = false;
if(sheet!=null&&sheet.length>0)...{
//Проходим по каждому листу
for(int i=0;i<sheet.length;i++)...{
если (таблица разрывов)
перерыв;
//Получаем количество строк на текущем листе
int rowNum = лист[i].getRows();
логическое значение BreakRow = ложь;
for(int j=0;j<rowNum;j++)...{
если (брейкстрока)
перерыв;
//Получаем все ячейки текущей строки
Cell[] cell = лист[i].getRow(j);
if(cells!=null&&cells.length>0)...{
логическое значение BreakCell = ложь;
//Проходим по каждой ячейке
for(int k=0;k<cells.length;k++)...{
если (брейкЯчейка)
перерыв;
//Читаем значение текущей ячейки
Строка cellValue = cell[k].getContents();
если (cellValue == ноль)
продолжать;
если(cellValue.contains(keyWord))...{
рез = правда;
BreakCell = Истина;
BreakRow = Истина;
BreakSheet = Истина;
}
}
}
}
}
}
//Окончательно закрываем ресурс и освобождаем память
вб.закрыть();
вернуть разрешение;
}
4. Вставьте значок изображения в Excel.
Вставлять изображения легко, см. следующий код:
Скопируйте код кода следующим образом:
/** *//**Вставка изображений в Excel
* @param dataSheet Лист, который нужно вставить.
* @param col Изображение начинается с этого столбца
* @param row Изображение начинается с этой строки
* @param width Количество столбцов, занимаемых изображением.
* @param height Количество строк, занимаемых изображением.
* @param imgFile Файл изображения, который нужно вставить.
*/
public static void InsertImg (WritableSheet dataSheet, int col, int row, int width,
int высота, Файл imgFile)...{
WritableImage img = новый WritableImage (столбец, строка, ширина, высота, imgFile);
dataSheet.addImage(img);
}
Комментарии к приведенному выше коду уже очень понятны, и, вероятно, нет необходимости больше это объяснять. Мы можем проверить это с помощью следующей программы:
Скопируйте код кода следующим образом:
пытаться...{
//Создаем рабочую книгу
Рабочая книга WritableWorkbook = Workbook.createWorkbook(new File("D:/test1.xls"));
//Рабочий лист, который нужно вставить
WritableSheet imgSheet = workbook.createSheet("Изображения",0);
//Файл изображения, который нужно вставить
Файл imgFile = новый файл("D:/1.png");
//Картинка вставляется в первую ячейку второй строки, занимая по шесть ячеек в длину и ширину.
InsertImg (imgSheet, 0,1,6,6,imgFile);
рабочая книга.write();
рабочая книга.закрыть();
} catch (IOException e) ...{
е.printStackTrace();
} catch (WriteException e) ...{
е.printStackTrace();
}
Но jxl поддерживает изображения только в формате PNG, а форматы jpg и gif не поддерживаются.
5. Вставьте верхний и нижний колонтитулы
Обычно верхние и нижние колонтитулы делятся на три части: левую, центральную и правую. Для вставки верхних и нижних колонтитулов можно использовать следующий код.
Скопируйте код кода следующим образом:
/** *//**Добавление верхнего и нижнего колонтитула в Excel
* @param dataSheet Лист, который будет добавлен в заголовок.
* @param осталось
* @param центр
* @парам верно
*/
public static void setHeader (таблица данных WritableSheet, строка слева, строка по центру, строка справа)... {
HeaderFooter hf = новый HeaderFooter();
hf.getLeft().append(слева);
hf.getCentre().append(центр);
hf.getRight().append(справа);
//Добавляем заголовок
dataSheet.getSettings().setHeader(hf);
//Добавляем нижний колонтитул
//dataSheet.getSettings().setFooter(hf);
}
Мы можем протестировать этот метод с помощью следующего кода:
Скопируйте код кода следующим образом:
пытаться...{
//Создаем рабочую книгу
Рабочая книга WritableWorkbook = Workbook.createWorkbook(new File("D:/test1.xls"));
//Рабочий лист, который нужно вставить
WritableSheet dataSheet = workbook.createSheet("Добавить заголовок",0);
ExcelUtils.setHeader(dataSheet, "chb", "2007-03-06", "Страница 1 из 3");
рабочая книга.write();
рабочая книга.закрыть();
} catch (IOException e) ...{
е.printStackTrace();
} catch (WriteException e) ...{
е.printStackTrace();
}