Czytanie i pisanie arkuszy kalkulacyjnych Excel

Społeczność open source stworzyła wiele projektów Java o otwartym kodzie źródłowym, od oprogramowania do tworzenia wykresów po ramy gier i procesory tekstu. W tym poście przedstawiam projekt biblioteki open source do czytania i pisania arkuszy kalkulacyjnych Microsoft Excel.

Polecanie biblioteki arkuszy kalkulacyjnych

P: Poproszono mnie o rozszerzenie oprogramowania do obsługi arkuszy kalkulacyjnych mojej firmy na bazie języka Java w celu odczytu i zapisu arkuszy kalkulacyjnych Excel. Czy możesz polecić bibliotekę Java typu open source, która pomoże mi w tym zadaniu?

O: Warto wypróbować JExcelAPI, czyli dojrzałą bibliotekę open source opartą na Javie, która umożliwia czytanie, pisanie i modyfikowanie arkuszy kalkulacyjnych Excel. Oto kilka z jego wielu funkcji:

  • Odczytuje dane ze skoroszytów programu Excel 95, 97, 2000, XP i 2003
  • Odczytuje i zapisuje formuły (tylko Excel 97 i nowsze)
  • Generuje arkusze kalkulacyjne w formacie Excel 2000
  • Obsługuje formatowanie czcionek, liczb i daty
  • Obsługuje cieniowanie komórek, obramowanie komórek i kolorowanie komórek
  • Modyfikuje istniejące arkusze
  • Obsługuje kopiowanie wykresów
  • Obsługuje wstawianie i kopiowanie obrazów do arkuszy kalkulacyjnych

JExcelAPI zostało opracowane przez Andrew Kahna i zostało wydane na licencji GNU Lesser General Public License.

Pobieranie biblioteki JExcelAPI

P: Jak pobrać JExcelAPI?

Odp .: Wykonaj następujące kroki, aby pobrać JExcelAPI:

  1. Skieruj przeglądarkę na stronę SourceForge JExcelAPI.
  2. Kliknij jexcelapiłącze.
  3. Na wyświetlonej stronie kliknij jedno z łączy do folderów. Na przykład kliknąłem 2.6.12łącze.
  4. Na wyświetlonej stronie kliknij nazwę pliku archiwum dystrybucyjnego. Na przykład kliknąłem jexcelapi_2_6_12.zipłącze.
  5. Po chwili przeglądarka powinna poprosić o zapisanie tego pliku. Śmiało i zapisz plik.

Po pobraniu cofnij archiwizację tego pliku. Należy zwrócić uwagę na jexcelapikatalog domowy w jexcelapi_2_6_12katalogu.

Demonstracja biblioteki JExcelAPI

P: Czy biblioteka JExcelAPI zawiera jakieś wersje demonstracyjne?

O: Katalog jexcelapidomowy JExcelAPI zawiera jxl.jarplik, który zawiera wersje demonstracyjne do czytania, pisania i kopiowania arkuszy kalkulacyjnych.

Demo odczytu odczytuje istniejący arkusz kalkulacyjny, konwertując go na format wartości rozdzielanych przecinkami (CSV) lub XML za pomocą opcji -csvlub -xmlwiersza polecenia. Rozważ następujące przykłady:

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

Te przykłady odczytują budget.xlsi wyprowadzają jego zawartość w formacie CSV i XML na standardowe wyjście. Zakłada się, że -csvnie -xmlokreślono ani ani -csv.

Wersja demonstracyjna zapisu tworzy przykładowy arkusz kalkulacyjny zawierający formuły, obramowania, obrazy i nie tylko. Ten arkusz kalkulacyjny jest generowany przez określenie opcji -writewiersza polecenia, jak pokazano poniżej:

java -jar jxl.jar -write sample.xls

Rysunek 1 przedstawia część wynikowego sample.xlsarkusza kalkulacyjnego.

Rysunek 1. Użyłem LibreOffice Calc, aby uzyskać dostęp do arkusza kalkulacyjnego sample.xls

Kopia demonstracyjna kopiuje przykładowy arkusz kalkulacyjny jxlrwtest.xls, który jest przechowywany w tym samym katalogu co jxl.jar, do nowego arkusza kalkulacyjnego. W wynikowym arkuszu kalkulacyjnym pierwszy arkusz (oryginalny) pozostaje niezmieniony, podczas gdy drugi arkusz (zmodyfikowany) zawiera zmodyfikowane wartości.

To demo jest generowane przez określenie opcji -rwwiersza polecenia, po której następuje jxlrwtest.xlsi nazwa wyjściowego arkusza kalkulacyjnego. Rozważmy następujący wiersz poleceń:

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

Ta linia poleceń kopiuje jxlrwtest.xlsdo copy.xls. Rysunek 2 przedstawia drugi (zmodyfikowany) arkusz w LibreOffice Calc.

Rysunek 2. Kliknij oryginalne i zmodyfikowane karty, aby wyświetlić oryginalne i zmodyfikowane arkusze

Zawiera JExcelAPI do kompilacji i wykonywania

P: Jak dołączyć JExcelAPI podczas kompilowania kodu źródłowego i uruchamiania aplikacji?

O: Aby uwzględnić JExcelAPI podczas kompilowania kodu źródłowego i uruchamiania aplikacji, wykonaj jedną z następujących czynności:

  • Dodaj plik jexcelapikatalogu domowego jxl.jardo CLASSPATHzmiennej środowiskowej.
  • Dołącz jxl.jarza pomocą opcji wiersza polecenia javaci javaprogramu -cp.

Programowanie z JExcelAPI

P: Jak tworzyć programy Java wykorzystujące JExcelAPI?

Odp .: Katalog jexcelapidomowy zawiera tutorial.htmlplik, który przedstawia podstawowy kurs programowania za pomocą JExcelAPI. Samouczek pokazuje, jak czytać, pisać i kopiować arkusze kalkulacyjne. W samouczku omówiono również formatowanie.

jexcelapizawiera również docspodkatalog, który zapewnia dostęp do obszernej dokumentacji API. Skieruj swoją przeglądarkę internetową na index.htmlplik tego katalogu, aby zbadać typy w czterech udokumentowanych pakietach tej biblioteki:

  • jxl: typy głównego pakietu
  • jxl.demo: typy dla różnych wersji demonstracyjnych
  • jxl.format: typy związane z formatowaniem
  • jxl.write: typy do zapisu w arkuszu kalkulacyjnym

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?

Następnym razem przedstawię zestaw łamigłówek, które dotyczą ewolucji bibliotek Java. Te łamigłówki koncentrują się na zgodności kodu źródłowego i binarnego między programami klienckimi a bibliotekami używanymi przez te programy.

pobierz Pobierz źródło Pobierz kod źródłowy aplikacji tego posta. Stworzone przez Jeffa Friesena dla JavaWorld

Do opracowania kodu wiadomości wykorzystano następujące oprogramowanie:

  • 64-bitowy JDK 7u6
  • JExcelAPI 2.6.12

Kod postu został przetestowany na następujących platformach:

  • JVM w 64-bitowym systemie Windows 7 z dodatkiem SP1

Ten artykuł „Czytanie i pisanie arkuszy kalkulacyjnych Excel” został pierwotnie opublikowany przez JavaWorld.