Editor di fogli di calcolo - Lavorare con i file

Sommario

File supportati

HTML5 Spreadsheet Editor può aprire file nei seguenti formati:

  • Excel 1997-2003 XLS
  • Excel 2007-2013 XLSX
  • XLSM
  • XLSB
  • XLTX
  • SpreadsheetML
  • CVS
  • ApriDocumento

Apri file locali

Per caricare un file dal computer locale:

  1. Passa aScheda File in cima.
  2. ClicApri dal computer per aprire la finestra di dialogo Sfoglia.
  3. Vai alla posizione desiderata del file.
  4. Fare clic sul file desiderato per selezionarlo.
  5. ClicAprire.

Il file verrà aperto nell’editor.

cose da fare:immagine_alt_testo

Come funziona?

Upload di file

L’utente seleziona un file dal computer locale che viene caricato dal browser Web sul server e ricevuto daFile PrimeFaces Caricamento componente.

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

Gestire la cartella di lavoro

Non appena il file viene caricato completamente, il metodo WorkbookService.onFileUpload entra in azione per gestire la situazione. WorkbookService riceve gli eventi dal browser Web e tiene traccia dello stato dell’intera cartella di lavoro. WorkbookService.onFileUpload passa il controllo a LoaderService per caricare la cartella di lavoro in memoria. Come laupload di file componente fornisce il file caricato come fileInputStream, il LoaderService lo carica utilizzando il metodo LoaderService.fromInputStream.

 public void onFileUpload(FileUploadEvent e) {

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

}

Caricamento e scaricamento

Il metodoLoaderService.fromInputStream legge ilInputStream fornito da fileUploadcomponente creare un’istanza dicom.aspose.cells.Workbookclasse. Questa istanza viene mantenuta in memoria finché l’utente continua a visualizzare o modificare il foglio di calcolo nel browser Web. Quando l’utente lascia l’editor o chiude il browser, le istanze inutilizzate vengono automaticamente scaricate dalla memoria per mantenere pulito il server.

 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;

}

Cache

La memorizzazione nella cache è molto importante per l’editor di fogli di calcolo HTML5. Fa funzionare tutto senza intoppi. CellsService mantiene nella cache righe, colonne, celle e proprietà di tutte le cartelle di lavoro caricate dall’editor. Quando LoaderService carica completamente un foglio di calcolo, lo legge dall’alto verso il basso e riempie la cache chiamando 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);

    }

Apri da Dropbox

Per aprire file da Dropbox:

  1. Passa aScheda File in cima.
  2. ClicApri da Dropbox per aprire il selettore di file di Dropbox.
  3. Se non hai già effettuato l’accesso, ti verrà richiesto di accedere al tuo account Dropbox.
  4. Passare al file desiderato e fare clic per selezionarlo.
  5. ClicScegliere in fondo.

Il file selezionato verrà aperto da Dropbox.

cose da fare:immagine_alt_testo

Come funziona?

IlApri da Dropbox pulsante utilizzaSelettore JavaScript di Dropbox API per aprire la finestra di dialogo di Dropbox Chooser. Il Chooser fornisce l’URL del file selezionato, che viene acquisito dalla funzione di callback e rispedito al server. Il server crea un’istanza di foglio di calcolo dall’URL, inizializza alcune cose di pulizia e invia gli aggiornamenti DOM al browser. Il browser esegue il rendering e aggiorna lo HTML e l’utente è pronto per modificare il documento caricato.

Apri dall’URL

I file possono essere aperti direttamente dagli URL. Ciò consente all’utente di modificare qualsiasi file pubblicamente disponibile su Internet. Per aprire il file append**?url=posizione** parametro con il valore desiderato**Posizione** durante il caricamento dell’editor. Per esempio:

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

cose da fare:immagine_alt_testo

Come funziona?

Crea un’istanza durante l’avvio

quandoFoglio di lavoroVisualizza bean backend è istanziato da JSF thePostConstruct metododentro viene chiamato che carica il foglio di calcolo utilizzando LoaderService.fromUrl.

Cache

La memorizzazione nella cache avviene subito dopo il caricamento del foglio di calcolo. IlLoaderService chiamateLoaderService.buildCellsCache, LoaderService.buildColumnWidthCache eLoaderService.buildRowHeightCache uno a uno per memorizzare nella cache il contenuto del foglio di calcolo e mantenere tutte le operazioni veloci e fluide.

Aggiornamenti DOM

Quando il foglio di calcolo è pronto sul lato server, i componenti JSF vengono utilizzati per generare nuovi HTML e inviare aggiornamenti DOM all’utente che vengono visualizzati dal browser web.

     @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);

    }

Crea un nuovo foglio di calcolo

Per creare un nuovo foglio di calcolo vuoto:

  1. Passa aScheda File.
  2. Clicca ilNuovo pulsante.

L’editor chiuderà il foglio di calcolo aperto, se presente, e ne aprirà uno nuovo.

cose da fare:immagine_alt_testo

Come funziona?

Crea un’istanza di un nuovo oggetto

Quando ilNuovo il pulsante viene cliccato dall’utente,WorksheetView.loadBlank , che alla fine chiamaLoaderService.fromBlank. LoaderService crea una nuova istanza di foglio di calcolo vuoto.

Cache

La memorizzazione nella cache avviene subito dopo il caricamento del foglio di calcolo. IlLoaderService chiamateLoaderService.buildCellsCache, LoaderService.buildColumnWidthCache eLoaderService.buildRowHeightCache uno a uno per memorizzare nella cache il contenuto del foglio di calcolo e mantenere tutte le operazioni veloci e fluide.

Aggiornamenti DOM

Quando il foglio di calcolo è pronto sul lato server, i componenti JSF vengono utilizzati per generare nuovi HTML e inviare aggiornamenti DOM all’utente che vengono visualizzati dal browser web.

     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);

    }

Esporta in vari formati

Dopo aver modificato i file, l’utente vorrà salvare le modifiche. L’editor consente all’utente di esportare e scaricare il foglio di calcolo modificato sul computer locale. Per esportare il file:

  1. Passa aScheda File in cima.
  2. ClicEsportare come pulsante.
  3. Scegli il formato desiderato dal menu a discesa.

Il file modificato verrà esportato per il download. I seguenti formati sono supportati per l’esportazione:

  • Excel 2007-2013 XLSX
  • Excel 1997-2003 XLS
  • Excel XLSM
  • Excel XLSB
  • Excel XLTX
  • Excel XLTM
  • SpreadsheetML
  • Formato documento portatile (PDF)
  • Foglio di calcolo OpenDocument (ODS)

Come funziona?

Il foglio di calcolo aperto viene convertito nel formato specificato dall’utente utilizzandoWorksheetView.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);

    }