среда, 10 апреля 2013 г.

Экспорт данных в Excel(библиотека jxl)


Задача по экспорту данных в Excel достаточно востребована.
В быту офисных работников зачастую документы представленные в табличном виде хранят именно в формате xls. А потому всю экспортируемую информацию, каких-то статистических данных отчетности необходимо сохранять в виде электронной таблицы.
Опишу пару главных объектов библиотеки jxl, а так же основных методов.

1)Создание файла, объекта книги и листа в данной книги
File myExcelFile = new File("myExcelFile.xls");
WritableWorkbook workbook = Workbook.createWorkbook(myExcelFile);
WritableSheet sheet = workbook.createSheet("export", 0);

2)Форматирование ячейки таблицы
WritableFont fontBig = new WritableFont(WritableFont.ARIAL, 16);
WritableCellFormat cellFormat = new WritableCellFormat(fontBig);
try {
//установка бордера
cellFormat.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK);
//выравнивание текста внутри ячейки по горизонтали
cellFormat.setAlignment(Alignment.CENTRE);
//выравнивание текста внутри ячейки по вертикали
cellFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
//перенос текста по словам, когда достигнута максимальная длина ячейки.
cellFormat.setWrap(true);

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

/*отсчет строк и колонок начинается с нуля, как принято в программировании, т.е. координатой ячейки A1 является точка(0,0); */
Label cell = new Label(column, row, "text", cellFormat);
sheet.addCell(cell);

3) Форматирование ЦЕЛИКОМ колонки 
Установка размера колонки, 17ть - это количество символов, а 256 это средняя длина одного символа, в результате чего получается нужная нам длина ячейки(колонки в нашем случае).
CellView thisView = new CellView();
thisView.setSize(17*256);
sheet.setColumnView(column, thisView);

4)Слияние ячеек. 
sheet.mergeCells(0, 9, 4, 12);
Что бы заполнить текстом ячейку после слияния, координата должна соответствовать координате первой ячейке в слиянии. т.е. в данном случае (0,9).

5)Для переноса текста внутри ячейки можно использовать последовательность "/012".
Label lb = new Label(0, 1, "asdasd" + \012);
sheet.addCell(lb);




понедельник, 8 апреля 2013 г.

Временные файлы java

В процессе разработки часто сталкиваюсь с необходимостью создания временного файла. И я вовремя узнал, что в JDK есть стандартный метод для создания временных файлов.
File tempFile = File.createTempFile("abc", "");
Этот метод создаёт временный файл в папке, специально предназначенной для временных файлов в данной операционной системе. Эта папка в разных ОС может называться по-разному, но для временного файла не очень важно, где он будет создан и как он будет называться. Важнее факт наличия специального каталога. После создания вы сразу получаете указатель на этот файл для дальнейшего манипулирования с ним.

Метод принимает два строковых параметра: префикс и суффикс. Префикс должен обязательно содержать не менее трёх символов. Префикс определяет начало имени временного файла. Суффикс определяет его конец, но он не обязателен. Если в качестве суффикса передать null, то временный файл получит расширение .tmp. Но ведь расширение ни на что не влияет, так что можно передать в качестве суффикса пустую строку, чтобы в конец имени временного файла ничего не добавлялось. Серединой же имени временного файла будет набор цифр.

Итак, для значений параметров, приведённых выше, метод создаст, например, такой файл:

/tmp/abc8859980780322653785
А вот этот файл может получиться, если в качестве суффикса передать null:
/tmp/abc7890857977307054209.tmp
Ну а если хотим заменить расширение tmp на что-нибудь другое, достаточно в качестве суффикса передать, например, ".temporary":
/tmp/abc7751462332148781358.temporary

MySql Like

Поиск по шаблону (LIKE и NOT LIKE) 
СУБД MySQL позволяет осуществлять запросы, которые отвечают определенным шаблонам. 

Для этого используются специальные операторы — LIKE и NOT LIKE, которым передается строка с символами — заместителями. 

Символ _ соответствует любому одному символу, а символ % соответствует любой последовательности символов или их отсутствию и является аналогом символа * в регулярных выражениях. 

Ниже приведен пример MySQL, который делает выборку 

всех значений из таблицы auto, где в поле label есть буква S: 

SELECT * FROM auto WHERE label LIKE `%S%`; 

Для поиска текста, где не встречается слово "программирование" можно воспользоваться следующим запросом: 

SELECT * FROM articles WHERE text_of_article NOT LIKE `%программирование %`;

'_' обозначает любой символ в строке
LIKE "_234567";