Editor di fogli di calcolo - Lavorare con i file
Sommario
- File supportati
- Apri file locali
- LoaderService.buildColumnWidthCache
- LoaderService.buildRowHeightCache
- Apri da Dropbox
- Apri dall’URL
- LoaderService.fromUrl
- LoaderService.buildCellsCache
- LoaderService.buildColumnWidthCache
- LoaderService.buildRowHeightCache
- Crea un nuovo foglio di calcolo
- LoaderService.fromBlank
- buildCellsCache
- buildColumnWidthCache
- buildRowHeightCache
- Esporta in vari formati
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:
- Passa aScheda File in cima.
- ClicApri dal computer per aprire la finestra di dialogo Sfoglia.
- Vai alla posizione desiderata del file.
- Fare clic sul file desiderato per selezionarlo.
- ClicAprire.
Il file verrà aperto nell’editor.
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:
- Passa aScheda File in cima.
- ClicApri da Dropbox per aprire il selettore di file di Dropbox.
- Se non hai già effettuato l’accesso, ti verrà richiesto di accedere al tuo account Dropbox.
- Passare al file desiderato e fare clic per selezionarlo.
- ClicScegliere in fondo.
Il file selezionato verrà aperto da Dropbox.
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
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:
- Passa aScheda File.
- Clicca ilNuovo pulsante.
L’editor chiuderà il foglio di calcolo aperto, se presente, e ne aprirà uno nuovo.
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:
- Passa aScheda File in cima.
- ClicEsportare come pulsante.
- 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);
}