スプレッドシート エディター - ファイルの操作
目次
- サポートされているファイル
- ローカル ファイルを開く LoaderService.buildColumnWidthCache
- LoaderService.buildRowHeightCache
- ドロップボックスから開く
- URLから開く LoaderService.fromUrl
- LoaderService.buildCellsCache LoaderService.buildColumnWidthCache
- LoaderService.buildRowHeightCache
- 新しいスプレッドシートを作成する LoaderService.fromBlank
- buildCellsCache -buildColumnWidthCache -buildRowHeightCache
- さまざまな形式にエクスポート
サポートされているファイル
HTML5 スプレッドシート エディターでは、次の形式のファイルを開くことができます。
- エクセル 1997-2003 XLS
- エクセル 2007-2013 XLSX
- XLSM
- XLSB
- XLTX
- SpreadsheetML
- CVS
- OpenDocument
ローカル ファイルを開く
ローカル コンピューターからファイルをアップロードするには:
- 切り替えるファイルタブ上に。
- クリックパソコンから開く参照ダイアログを開きます。
- ファイルの目的の場所に移動します。
- 目的のファイルをクリックして選択します。
- クリック開ける.
ファイルがエディターで開かれます。
使い方?
ファイルのアップロード
ユーザーはローカル コンピューターからファイルを選択します。このファイルは、Web ブラウザーからサーバーにアップロードされ、によって受信されます。PrimeFaces ファイルアップロード成分。
<p:fileUpload fileUploadListener="#\{workbook.onFileUpload\}" update=":ribbon :intro :sheet" />
ワークブックの管理
ファイルが完全にアップロードされるとすぐに、 WorkbookService.onFileUpload メソッドが動作して状況を処理します。 WorkbookService は Web ブラウザーからイベントを受け取り、ブック全体の状態を追跡します。 WorkbookService.onFileUpload は、コントロールを LoaderService に渡し、ワークブックをメモリに読み込みます。としてファイルアップロードコンポーネントは、アップロードされたファイルを入力ストリーム、LoaderService は LoaderService.fromInputStream メソッドを使用してそれをロードします。
public void onFileUpload(FileUploadEvent e) {
this.current = loader.fromInputStream(e.getFile().getInputstream(), e.getFile().getFileName());
}
上げ下ろし
方法LoaderService.fromInputStreamを読む入力ストリームfileUpload 提供成分のインスタンスを作成com.aspose.cells.Workbookクラス。このインスタンスは、ユーザーが Web ブラウザーでスプレッドシートを表示または編集し続ける限り、メモリに保持されます。ユーザーがエディターを離れるかブラウザーを閉じると、使用されていないインスタンスがメモリから自動的にアンロードされ、サーバーがクリーンに保たれます。
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;
}
キャッシング
キャッシングは、HTML5 スプレッドシート エディターにとって非常に重要です。すべてがスムーズに機能します。 CellsService は、エディターによって読み込まれたすべてのワークブックのキャッシュ行、列、セル、およびプロパティを保持します。 LoaderService がスプレッドシートを完全にロードすると、スプレッドシートを上から下に読み取り、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);
}
ドロップボックスから開く
Dropbox からファイルを開くには:
- 切り替えるファイルタブ上に。
- クリックドロップボックスから開く Dropbox ファイル チューザーを開きます。
- まだサインインしていない場合は、Dropbox アカウントにサインインする必要があります。
- 目的のファイルに移動し、クリックして選択します。
- クリック選ぶ底に。
選択したファイルが Dropbox から開かれます。
使い方?
のドロップボックスから開くボタンの使用Dropbox JavaScript セレクター API Dropbox Chooser ダイアログを開きます。 Chooser は、コールバック関数によってキャプチャされ、サーバーに送り返される、選択されたファイルの URL を提供します。サーバーは URL からスプレッドシートのインスタンスを作成し、いくつかのハウスキーピングを初期化し、DOM の更新をブラウザーに送り返します。ブラウザーは HTML をレンダリングして更新し、ユーザーは読み込まれたドキュメントを編集する準備が整います。
URLから開く
ファイルは URL から直接開くことができます。これにより、ユーザーはインターネット上で公開されているファイルを編集できます。ファイルを開くには追加**?url=場所**希望の値を持つパラメータ**位置**エディタのロード中。例えば:
http://editor.aspose.com/?url=http://example.com/Sample.xlsx
使い方?
起動時にインスタンス化
いつワークシート ビューバックエンド Bean は、JSF によってインスタンス化されます。ポストコンストラクト方法初期化が呼び出され、LoaderService.fromUrl を使用してスプレッドシートをロードします。
キャッシング
キャッシュは、スプレッドシートが読み込まれた直後に発生します。のローダーサービス通話LoaderService.buildCellsCache, LoaderService.buildColumnWidthCacheとLoaderService.buildRowHeightCacheスプレッドシートのコンテンツを 1 つずつキャッシュし、すべての操作を高速かつスムーズに保ちます。
DOM の更新
サーバー側でスプレッドシートの準備ができると、JSF コンポーネントを使用して新しい HTML が生成され、Web ブラウザーによってレンダリングされる DOM 更新がユーザーに送信されます。
@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);
}
新しいスプレッドシートを作成する
新しい空のスプレッドシートを作成するには:
- 切り替えるファイルタブ.
- クリック新しいボタン。
エディターは、開いているスプレッドシートがあればそれを閉じ、新しいスプレッドシートを開きます。
使い方?
新しいオブジェクトをインスタンス化する
とき新しいボタンがユーザーによってクリックされ、WorksheetView.loadBlank 、最終的に呼び出しますLoaderService.fromBlank. LoaderService は、空白のスプレッドシートの新しいインスタンスを作成します。
キャッシング
キャッシュは、スプレッドシートが読み込まれた直後に発生します。のローダーサービス通話LoaderService.buildCellsCache, LoaderService.buildColumnWidthCacheとLoaderService.buildRowHeightCacheスプレッドシートのコンテンツを 1 つずつキャッシュし、すべての操作を高速かつスムーズに保ちます。
DOM の更新
サーバー側でスプレッドシートの準備ができると、JSF コンポーネントを使用して新しい HTML が生成され、Web ブラウザーによってレンダリングされる DOM 更新がユーザーに送信されます。
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);
}
さまざまな形式にエクスポート
ファイルを編集した後、ユーザーは変更を保存したいと思うでしょう。エディタを使用すると、変更したスプレッドシートをエクスポートしてローカル コンピュータにダウンロードできます。ファイルをエクスポートするには:
- 切り替えるファイルタブ上に。
- クリック輸出ボタンとして。
- ドロップダウンから目的の形式を選択します。
変更されたファイルはダウンロード用にエクスポートされます。エクスポートでは、次の形式がサポートされています。
- エクセル 2007-2013 XLSX
- エクセル 1997-2003 XLS
- エクセル XLSM
- エクセル XLSB
- エクセル XLTX
- エクセル XLTM
- SpreadsheetML
- PDF形式(PDF)
- OpenDocument スプレッドシート (ODS)
使い方?
開いたスプレッドシートは、次を使用してユーザー指定の形式に変換されますWorksheetView.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);
}