Tabelleneditor - Arbeiten mit Dateien

Inhaltsverzeichnis

Unterstützte Dateien

Der HTML5-Tabellen-Editor kann Dateien in den folgenden Formaten öffnen:

  • Excel 1997-2003 XLS
  • Excel 2007-2013 XLSX
  • XLSM
  • XLSB
  • XLTX
  • SpreadsheetML
  • Lebenslauf
  • OpenDocument

Lokale Dateien öffnen

So laden Sie eine Datei vom lokalen Computer hoch:

  1. Wechseln zuRegisterkarte Datei oben drauf.
  2. KlickenVom Computer öffnen , um das Dialogfeld „Durchsuchen“ zu öffnen.
  3. Gehen Sie zum gewünschten Speicherort der Datei.
  4. Klicken Sie auf die gewünschte Datei, um sie auszuwählen.
  5. KlickenOffen.

Die Datei wird im Editor geöffnet.

todo: Bild_alt_Text

Wie es funktioniert?

Datei-Upload

Der Benutzer wählt eine Datei vom lokalen Computer aus, die vom Webbrowser auf den Server hochgeladen und empfangen wirdPrimeFaces-DateiUpload Komponente.

 <p:fileUpload fileUploadListener="#\{workbook.onFileUpload\}" update=":ribbon :intro :sheet" />

Arbeitsbuch verwalten

Sobald die Datei vollständig hochgeladen ist, tritt die WorkbookService.onFileUpload-Methode in Aktion, um die Situation zu behandeln. WorkbookService empfängt Ereignisse vom Webbrowser und verfolgt den Status der gesamten Arbeitsmappe. WorkbookService.onFileUpload übergibt die Steuerung an LoaderService, um die Arbeitsmappe in den Arbeitsspeicher zu laden. Als dieDatei-Upload Komponente stellt die hochgeladene Datei alsEingabestrom, der LoaderService lädt es mit der Methode LoaderService.fromInputStream.

 public void onFileUpload(FileUploadEvent e) {

    this.current = loader.fromInputStream(e.getFile().getInputstream(), e.getFile().getFileName());

}

Laden und Entladen

Die MethodeLoaderService.fromInputStream liest dieEingabestrom bereitgestellt von fileUploadKomponente Instanz erstellen voncom.aspose.cells.WorkbookKlasse. Diese Instanz wird gespeichert, solange der Benutzer die Tabelle im Webbrowser anzeigt oder bearbeitet. Wenn der Benutzer den Editor verlässt oder den Browser schließt, werden die nicht verwendeten Instanzen automatisch aus dem Speicher entfernt, um den Server sauber zu halten.

 public String fromInputStream(InputStream s, String name) {

    com.aspose.cells.Workbook w;

    try (InputStream i = s) {

        w = new com.aspose.cells.Workbook(i);

    } catch (Exception x) {

        return null;

    }

    String key = this.generateKey();

    this.workbooks.put(key, w);

    this.buildCellsCache(key);

    this.buildColumnWidthCache(key);

    this.buildRowHeightCache(key);

    return key;

}

Caching

Caching ist für den HTML5-Tabellen-Editor sehr wichtig. Damit funktioniert alles reibungslos. Der CellsService speichert Zeilen, Spalten, Zellen und Eigenschaften aller vom Editor geladenen Arbeitsmappen im Cache. Wenn LoaderService eine Tabelle vollständig lädt, liest es sie von oben nach unten und füllt den Cache durch Aufrufen von LoaderService.buildCellsCache, LoaderService.buildColumnWidthCache, LoaderService.buildRowHeightCache

     public void buildCellsCache(String key) {

        com.aspose.cells.Workbook wb = workbooks.get(key);

        com.aspose.cells.Worksheet ws = wb.getWorksheets().get(wb.getWorksheets().getActiveSheetIndex());

        int maxColumn = ws.getCells().getMaxColumn() + 1;

        maxColumn = maxColumn + 26 - (maxColumn % 26);

        int maxRow = 20 + ws.getCells().getMaxRow() + 1;

        maxRow = maxRow + 10 - (maxRow % 10);

        ArrayList<Column> columns = new ArrayList<>(maxColumn);

        ArrayList<Row> rows = new ArrayList<>(maxRow);

        for (int i = 0; i < maxColumn; i++) {

            columns.add(i, new Column(i, com.aspose.cells.CellsHelper.columnIndexToName(i)));

        }

        for (int i = 0; i < maxRow; i++) {

            rows.add(i, new Row.Builder().setId(i).build());

        }

        for (Object o : ws.getCells()) {

            com.aspose.cells.Cell c = (com.aspose.cells.Cell) o;

            rows.get(c.getRow()).putCell(c.getColumn(), cells.fromAsposeCell(c));

        }

        for (int i = 0; i < maxRow; i++) {

            for (int j = 0; j < maxColumn; j++) {

                String col = com.aspose.cells.CellsHelper.columnIndexToName(j);

                if (!rows.get(i).getCellsMap().containsKey(col)) {

                    rows.get(i).putCell(col, cells.fromBlank(j, i));

                }

            }

        }

        cells.putColumns(key, columns);

        cells.putRows(key, rows);

    }

LoaderService.buildColumnWidthCache

     public void buildColumnWidthCache(String key) {

        com.aspose.cells.Workbook wb = workbooks.get(key);

        com.aspose.cells.Worksheet ws = wb.getWorksheets().get(wb.getWorksheets().getActiveSheetIndex());

        ArrayList<Integer> columnWidth = new ArrayList<>();

        for (int i = 0; i < cells.getColumns(key).size(); i++) {

            columnWidth.add(i, ws.getCells().getColumnWidthPixel(i));

        }

        cells.putColumnWidth(key, columnWidth);

    }

LoaderService.buildRowHeightCache

     public void buildRowHeightCache(String key) {

        com.aspose.cells.Workbook wb = workbooks.get(key);

        com.aspose.cells.Worksheet ws = wb.getWorksheets().get(wb.getWorksheets().getActiveSheetIndex());

        ArrayList<Integer> rowHeight = new ArrayList<>();

        for (int i = 0; i < cells.getRows(key).size(); i++) {

            rowHeight.add(i, ws.getCells().getRowHeightPixel(i));

        }

        cells.putRowHeight(key, rowHeight);

    }

Aus Dropbox öffnen

So öffnen Sie Dateien aus Dropbox:

  1. Wechseln zuRegisterkarte Datei oben drauf.
  2. KlickenAus Dropbox öffnen um die Dropbox-Dateiauswahl zu öffnen.
  3. Wenn Sie noch nicht angemeldet sind, müssen Sie sich bei Ihrem Dropbox-Konto anmelden.
  4. Navigieren Sie zur gewünschten Datei und klicken Sie darauf, um sie auszuwählen.
  5. KlickenWählen unten.

Ihre ausgewählte Datei wird von Dropbox geöffnet.

todo: Bild_alt_Text

Wie es funktioniert?

DasAus Dropbox öffnen Schaltfläche verwendetDropbox-JavaScript-Auswahl API , um das Dropbox-Auswahldialogfeld zu öffnen. Die Auswahl stellt die URL der ausgewählten Datei bereit, die von der Rückruffunktion erfasst und an den Server zurückgesendet wird. Der Server erstellt eine Instanz der Tabelle aus der URL, initialisiert einige Verwaltungsaufgaben und sendet DOM-Aktualisierungen an den Browser zurück. Der Browser rendert und aktualisiert HTML und der Benutzer ist bereit, das geladene Dokument zu bearbeiten.

Von URL öffnen

Dateien können direkt aus URLs geöffnet werden. Dadurch kann der Benutzer jede öffentlich verfügbare Datei im Internet bearbeiten. Zum Öffnen der Datei anhängen**?url=Standort** Parameter mit dem gewünschten Wert**Lage** beim Laden des Editors. Zum Beispiel:

 http://editor.aspose.com/?url=http://example.com/Sample.xlsx

todo: Bild_alt_Text

Wie es funktioniert?

Instanziieren Sie während des Starts

WannArbeitsblattansicht Backend-Bean wird von JSF instanziiertPostKonstrukt Methodedrin aufgerufen, die die Tabelle mit LoaderService.fromUrl lädt.

Caching

Das Caching erfolgt direkt nach dem Laden der Tabelle. DasLoaderService AnrufeLoaderService.buildCellsCache, LoaderService.buildColumnWidthCache undLoaderService.buildRowHeightCache eins nach dem anderen, um den Inhalt der Tabelle zwischenzuspeichern und alle Vorgänge schnell und reibungslos zu halten.

DOM-Updates

Wenn die Tabelle serverseitig bereit ist, werden JSF-Komponenten verwendet, um neue HTML zu generieren und DOM-Aktualisierungen an den Benutzer zu senden, die vom Webbrowser gerendert werden.

     @PostConstruct

    private void init() {

        String requestedSourceUrl = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("url");

        if (requestedSourceUrl != null) {

            try {

                this.sourceUrl = new URL(requestedSourceUrl).toString();

                this.loadFromUrl();

            } catch (MalformedURLException x) {

                msg.sendMessageDialog("The specified URL is invalid", requestedSourceUrl);

            }

        }

    }

LoaderService.fromUrl

     public String fromUrl(String url) {

        com.aspose.cells.Workbook w;

        try (InputStream i = new URL(url).openStream()) {

            w = new com.aspose.cells.Workbook(i);

        } catch (Exception x) {

            throw new RuntimeException(x);

        }

        String key = generateKey();

        workbooks.put(key, w);

        buildCellsCache(key);

        buildColumnWidthCache(key);

        buildRowHeightCache(key);

        return key;

    }

LoaderService.buildCellsCache

     public void buildCellsCache(String key) {

        com.aspose.cells.Workbook wb = workbooks.get(key);

        com.aspose.cells.Worksheet ws = wb.getWorksheets().get(wb.getWorksheets().getActiveSheetIndex());

        int maxColumn = ws.getCells().getMaxColumn() + 1;

        maxColumn = maxColumn + 26 - (maxColumn % 26);

        int maxRow = 20 + ws.getCells().getMaxRow() + 1;

        maxRow = maxRow + 10 - (maxRow % 10);

        ArrayList<Column> columns = new ArrayList<>(maxColumn);

        ArrayList<Row> rows = new ArrayList<>(maxRow);

        for (int i = 0; i < maxColumn; i++) {

            columns.add(i, new Column(i, com.aspose.cells.CellsHelper.columnIndexToName(i)));

        }

        for (int i = 0; i < maxRow; i++) {

            rows.add(i, new Row.Builder().setId(i).build());

        }

        for (Object o : ws.getCells()) {

            com.aspose.cells.Cell c = (com.aspose.cells.Cell) o;

            rows.get(c.getRow()).putCell(c.getColumn(), cells.fromAsposeCell(c));

        }

        for (int i = 0; i < maxRow; i++) {

            for (int j = 0; j < maxColumn; j++) {

                String col = com.aspose.cells.CellsHelper.columnIndexToName(j);

                if (!rows.get(i).getCellsMap().containsKey(col)) {

                    rows.get(i).putCell(col, cells.fromBlank(j, i));

                }

            }

        }

        cells.putColumns(key, columns);

        cells.putRows(key, rows);

    }

LoaderService.buildColumnWidthCache

     public void buildColumnWidthCache(String key) {

        com.aspose.cells.Workbook wb = workbooks.get(key);

        com.aspose.cells.Worksheet ws = wb.getWorksheets().get(wb.getWorksheets().getActiveSheetIndex());

        ArrayList<Integer> columnWidth = new ArrayList<>();

        for (int i = 0; i < cells.getColumns(key).size(); i++) {

            columnWidth.add(i, ws.getCells().getColumnWidthPixel(i));

        }

        cells.putColumnWidth(key, columnWidth);

    }

LoaderService.buildRowHeightCache

     public void buildRowHeightCache(String key) {

        com.aspose.cells.Workbook wb = workbooks.get(key);

        com.aspose.cells.Worksheet ws = wb.getWorksheets().get(wb.getWorksheets().getActiveSheetIndex());

        ArrayList<Integer> rowHeight = new ArrayList<>();

        for (int i = 0; i < cells.getRows(key).size(); i++) {

            rowHeight.add(i, ws.getCells().getRowHeightPixel(i));

        }

        cells.putRowHeight(key, rowHeight);

    }

Erstellen Sie eine neue Tabelle

So erstellen Sie eine neue leere Tabelle:

  1. Wechseln zuRegisterkarte Datei.
  2. Drücke denNeu Knopf.

Der Editor schließt die geöffnete Tabelle, falls vorhanden, und öffnet eine neue.

todo: Bild_alt_Text

Wie es funktioniert?

Instanziieren Sie ein neues Objekt

Wenn dieNeu Schaltfläche wird vom Benutzer angeklickt,WorksheetView.loadBlank , die schließlich anruftLoaderService.fromBlank. LoaderService erstellt eine neue Instanz einer leeren Tabelle.

Caching

Das Caching erfolgt direkt nach dem Laden der Tabelle. DasLoaderService AnrufeLoaderService.buildCellsCache, LoaderService.buildColumnWidthCache undLoaderService.buildRowHeightCache eins nach dem anderen, um den Inhalt der Tabelle zwischenzuspeichern und alle Vorgänge schnell und reibungslos zu halten.

DOM-Updates

Wenn die Tabelle serverseitig bereit ist, werden JSF-Komponenten verwendet, um neue HTML zu generieren und DOM-Aktualisierungen an den Benutzer zu senden, die vom Webbrowser gerendert werden.

     public void loadBlank() {

        this.loadedWorkbook = loader.fromBlank();

    }

LoaderService.fromBlank

     public String fromBlank() {

        com.aspose.cells.Workbook w = new com.aspose.cells.Workbook();

        String key = generateKey();

        workbooks.put(key, w);

        buildCellsCache(key);

        buildColumnWidthCache(key);

        buildRowHeightCache(key);

        return key;

    }

buildCellsCache

     public void buildCellsCache(String key) {

        com.aspose.cells.Workbook wb = workbooks.get(key);

        com.aspose.cells.Worksheet ws = wb.getWorksheets().get(wb.getWorksheets().getActiveSheetIndex());

        int maxColumn = ws.getCells().getMaxColumn() + 1;

        maxColumn = maxColumn + 26 - (maxColumn % 26);

        int maxRow = 20 + ws.getCells().getMaxRow() + 1;

        maxRow = maxRow + 10 - (maxRow % 10);

        ArrayList<Column> columns = new ArrayList<>(maxColumn);

        ArrayList<Row> rows = new ArrayList<>(maxRow);

        for (int i = 0; i < maxColumn; i++) {

            columns.add(i, new Column(i, com.aspose.cells.CellsHelper.columnIndexToName(i)));

        }

        for (int i = 0; i < maxRow; i++) {

            rows.add(i, new Row.Builder().setId(i).build());

        }

        for (Object o : ws.getCells()) {

            com.aspose.cells.Cell c = (com.aspose.cells.Cell) o;

            rows.get(c.getRow()).putCell(c.getColumn(), cells.fromAsposeCell(c));

        }

        for (int i = 0; i < maxRow; i++) {

            for (int j = 0; j < maxColumn; j++) {

                String col = com.aspose.cells.CellsHelper.columnIndexToName(j);

                if (!rows.get(i).getCellsMap().containsKey(col)) {

                    rows.get(i).putCell(col, cells.fromBlank(j, i));

                }

            }

        }

        cells.putColumns(key, columns);

        cells.putRows(key, rows);

    }

buildColumnWidthCache

     public void buildColumnWidthCache(String key) {

        com.aspose.cells.Workbook wb = workbooks.get(key);

        com.aspose.cells.Worksheet ws = wb.getWorksheets().get(wb.getWorksheets().getActiveSheetIndex());

        ArrayList<Integer> columnWidth = new ArrayList<>();

        for (int i = 0; i < cells.getColumns(key).size(); i++) {

            columnWidth.add(i, ws.getCells().getColumnWidthPixel(i));

        }

        cells.putColumnWidth(key, columnWidth);

    }

buildRowHeightCache

     public void buildRowHeightCache(String key) {

        com.aspose.cells.Workbook wb = workbooks.get(key);

        com.aspose.cells.Worksheet ws = wb.getWorksheets().get(wb.getWorksheets().getActiveSheetIndex());

        ArrayList<Integer> rowHeight = new ArrayList<>();

        for (int i = 0; i < cells.getRows(key).size(); i++) {

            rowHeight.add(i, ws.getCells().getRowHeightPixel(i));

        }

        cells.putRowHeight(key, rowHeight);

    }

Export in verschiedene Formate

Nach dem Bearbeiten von Dateien möchte der Benutzer die Änderungen speichern. Der Editor ermöglicht es dem Benutzer, die modifizierte Tabelle zu exportieren und auf den lokalen Computer herunterzuladen. So exportieren Sie die Datei:

  1. Wechseln zuRegisterkarte Datei oben drauf.
  2. KlickenExport als Knopf.
  3. Wählen Sie Ihr gewünschtes Format aus der Dropdown-Liste.

Die geänderte Datei wird zum Download exportiert. Die folgenden Formate werden für den Export unterstützt:

  • Excel 2007-2013 XLSX
  • Excel 1997-2003 XLS
  • Excel XLSM
  • Excel XLSB
  • Excel XLTX
  • Excel XLTM
  • SpreadsheetML
  • Portables Dokumentenformat (PDF)
  • OpenDocument-Tabelle (ODS)

Wie es funktioniert?

Die geöffnete Tabelle wird mit in ein benutzerdefiniertes Format konvertiertWorksheetView.getOutputFile.

     public StreamedContent getOutputFile(int saveFormat) {

        byte[] buf;

        String ext = null;

        switch (saveFormat) {

            case com.aspose.cells.SaveFormat.EXCEL_97_TO_2003:

                ext = "xls";

                break;

            case com.aspose.cells.SaveFormat.XLSX:

                ext = "xlsx";

                break;

            case com.aspose.cells.SaveFormat.XLSM:

                ext = "xlsm";

                break;

            case com.aspose.cells.SaveFormat.XLSB:

                ext = "xlsb";

                break;

            case com.aspose.cells.SaveFormat.XLTX:

                ext = "xltx";

                break;

            case com.aspose.cells.SaveFormat.XLTM:

                ext = "xltm";

                break;

            case com.aspose.cells.SaveFormat.SPREADSHEET_ML:

                ext = "xml";

                break;

            case com.aspose.cells.SaveFormat.PDF:

                ext = "pdf";

                break;

            case com.aspose.cells.SaveFormat.ODS:

                ext = "ods";

                break;

        }

        try {

            ByteArrayOutputStream out = new ByteArrayOutputStream();

            getAsposeWorkbook().save(out, saveFormat);

            buf = out.toByteArray();

        } catch (Exception x) {

            throw new RuntimeException(x);

        }

        return new DefaultStreamedContent(new ByteArrayInputStream(buf), "application/octet-stream", "Spreadsheet." + ext);

    }