Четене и писане на електронни таблици в Excel

Общността с отворен код е създала много проекти с отворен код Java, които варират от графичен софтуер до игрови рамки до текстови процесори. В тази публикация представям проект с библиотека с отворен код за четене и писане на електронни таблици на Microsoft Excel.

Препоръчване на библиотека с електронни таблици

Въпрос: Бях помолен да разширя базиран на Java софтуер за електронни таблици, за да чета и пиша електронни таблици на Excel. Можете ли да препоръчате Java библиотека с отворен код, която ще ми помогне с тази задача?

О: Може да искате да проверите JExcelAPI, която е зряла, базирана на Java библиотека с отворен код, която ви позволява да четете, пишете и модифицирате електронни таблици на Excel. Ето няколко от многото му характеристики:

  • Чете данни от работни книги на Excel 95, 97, 2000, XP и 2003
  • Чете и пише формули (само Excel 97 и по-нови версии)
  • Генерира електронни таблици във формат Excel 2000
  • Поддържа форматиране на шрифт, номер и дата
  • Поддържа засенчване на клетки, граничене с клетки и оцветяване на клетки
  • Променя съществуващите работни листове
  • Поддържа копиране на диаграми
  • Поддържа вмъкване и копиране на изображения в електронни таблици

JExcelAPI е разработен от Андрю Кан и е издаден под GNU Lesser General Public License.

Изтегляне на библиотеката JExcelAPI

В: Как да изтегля JExcelAPI?

О: Изпълнете следните стъпки, за да изтеглите JExcelAPI:

  1. Насочете браузъра си към сайта SourceForge на JExcelAPI.
  2. Щракнете върху jexcelapiвръзката.
  3. На получената страница щракнете върху една от връзките към папката. Например щракнах върху 2.6.12връзката.
  4. На получената страница щракнете върху името на файла на архива на разпространението. Например щракнах върху jexcelapi_2_6_12.zipвръзката.
  5. След кратко забавяне браузърът ви трябва да ви подкани да запазите този файл. Продължете и запазете файла.

След изтеглянето деархивирайте този файл. Трябва да наблюдавате jexcelapiдомашна директория в jexcelapi_2_6_12директорията.

Демонстриране на библиотеката JExcelAPI

Въпрос: Библиотеката JExcelAPI съдържа ли демонстрации?

О: Домашната jexcelapiдиректория на JExcelAPI съдържа jxl.jarфайл, който съдържа демонстрации за четене, писане и копиране на електронни таблици.

Прочетената демонстрация чете съществуваща електронна таблица, преобразувайки я в стойност, разделена със запетая (CSV) или XML формат чрез опцията -csvили -xmlкомандния ред. Обмислете следните примери:

java -jar jxl.jar -csv budget.xls java -jar jxl.jar -xml budget.xls

Тези примери четат budget.xlsи извеждат съдържанието му в CSV и XML формат на стандартен изход. Когато нито е -csvнито -xmlе посочено, -csvсе приема.

Демото за запис създава примерна електронна таблица, която включва формули, граници, изображения и др. Тази електронна таблица се генерира чрез посочване на -writeопцията на командния ред, както е показано по-долу:

java -jar jxl.jar -write sample.xls

Фигура 1 показва част от получената sample.xlsелектронна таблица.

Фигура 1. Използвах LibreOffice Calc за достъп до електронната таблица sample.xls

Демонстрацията за копиране копира примерна електронна таблица jxlrwtest.xls, която се съхранява в същата директория като jxl.jarв нова електронна таблица. В получената електронна таблица първият лист (оригинал) е непроменен, докато вторият лист (модифициран) съдържа модифицирани стойности.

Тази демонстрация се генерира чрез посочване на -rwопцията за командния ред, последвана от jxlrwtest.xlsи името на изходната електронна таблица. Обмислете следния команден ред:

java -jar jxl.jar -rw jxlrwtest.xls copy.xls

Този команден ред копира jxlrwtest.xlsв copy.xls. Фигура 2 показва втория (модифициран) лист в LibreOffice Calc.

Фигура 2. Щракнете върху оригиналния и модифициран раздел, за да видите оригиналния и модифицирания лист

Включително JExcelAPI за компилация и изпълнение

В: Как да включа JExcelAPI, когато компилирам изходния код и стартирам приложение?

О: За да включите JExcelAPI при компилиране на изходния код и стартиране на приложение, направете едно от следните:

  • Добавете файла на jexcelapiдомашната директория jxl.jarкъм CLASSPATHпроменливата на вашата среда.
  • Включете jxl.jarчрез опцията за команден ред на javacи на javaпрограмата -cp.

Програмиране с JExcelAPI

Въпрос: Как да създам Java програми, които използват JExcelAPI?

A: В jexcelapiуказателя дома включва tutorial.htmlфайл, който представлява основен урок за програмиране с JExcelAPI. Урокът ви показва как да четете, пишете и копирате електронни таблици. Урокът също обсъжда форматирането.

jexcelapiвключва и docsподдиректория, която осигурява достъп до обширна документация за API. Насочете вашия уеб браузър към index.htmlфайла на тази директория и можете да изследвате типовете в четирите документирани пакета на тази библиотека:

  • jxl: типовете на основния пакет
  • jxl.demo: типове за различните демонстрации
  • jxl.format: типове, свързани с форматирането
  • jxl.write: типове за писане в електронна таблица

Note that this list isn't exhaustive. Additional packages such as jxl.read are present but are not documented. To learn about additional packages, execute jar tvf jxl.jar and examine the package information in the resulting JAR listing.

To help you get started with JExcelAPI, I've created a simple JExcelAPIDemo application that demonstrates creating a new spreadsheet that is saved in output.xls and then reading and outputting the contents of this spreadsheet. Check out Listing 1.

Listing 1. Writing and reading a simple spreadsheet

import java.io.File; import java.io.IOException; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; import jxl.write.Label; import jxl.write.Number; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; public class JExcelAPIDemo { public static void main(String[] args) throws BiffException, IOException, WriteException { WritableWorkbook wworkbook; wworkbook = Workbook.createWorkbook(new File("output.xls")); WritableSheet wsheet = wworkbook.createSheet("First Sheet", 0); Label label = new Label(0, 2, "A label record"); wsheet.addCell(label); Number number = new Number(3, 4, 3.1459); wsheet.addCell(number); wworkbook.write(); wworkbook.close(); Workbook workbook = Workbook.getWorkbook(new File("output.xls")); Sheet sheet = workbook.getSheet(0); Cell cell1 = sheet.getCell(0, 2); System.out.println(cell1.getContents()); Cell cell2 = sheet.getCell(3, 4); System.out.println(cell2.getContents()); workbook.close(); } }

Listing 1 first creates a writable workbook by invoking one of Workbook's factory methods. A writable sheet is then created for this workbook, and then a label and a number are added as the sheet's two cell values. The workbook is then written and closed.

Listing 1 continues by getting a workbook associated with output.xls and reading its contents. The getSheet() method provides access to the first sheet within this workbook. Its getCell() method is called to access the two cells, whose contents are then output.

Assuming that jxl.jar is located in the current directory, execute the following command to compile Listing 1:

javac -cp jxl.jar JExcelAPIDemo.java

Assuming success, execute the following command to run JExcelAPIDemo:

java -cp jxl.jar;. JExcelAPIDemo

You should observe the following output:

A label record 3.146

Figure 3 shows you output.xls in a LibreOffice context.

Figure 3. The solitary sheet displays two cell values

What's next?

Следващия път представям набор от пъзели, които разглеждат развитието на Java библиотеките. Тези пъзели се фокусират върху съвместимостта на изходния и двоичния код между клиентските програми и библиотеките, които тези програми използват.

изтегляне Изтегляне на източника Вземете изходния код за приложенията на тази публикация. Създадено от Jeff Friesen за JavaWorld

Следният софтуер е използван за разработване на кода на пощата:

  • 64-битов JDK 7u6
  • JExcelAPI 2.6.12

Кодът на пощата беше тестван на следната платформа (и):

  • JVM на 64-битов Windows 7 SP1

Тази история „Четене и писане на електронни таблици в Excel“ първоначално е публикувана от JavaWorld.