Работа с хранилищем GridJs
Работа с хранилищем GridJs
процесс работы с общим файлом
После импорта файла таблицы ,
GridJs создаст файл кэша с указанным идентификатором (UID) в папке Config.file_cache_directory
,
в формате Aspose.Cells.SaveFormat.Xlsx,
GridJs также сохраняет все формы/изображения в zip-архивном файле в папке Config.file_cache_directory
для последующего отображения форм/изображений в пользовательском интерфейсе (UI).
и после каждой операции обновления в клиентском интерфейсе (UI),
например, установка значения ячейки, установка стиля ячейки и т. д.,
клиентская часть js GridJs вызовет ajax-запрос для выполнения операции UpdateCell.
В этом действии происходит сохранение обратно в файл кэша во время выполнения метода UpdateCell.
# update action :/GridJs2/UpdateCell
@app.route('/GridJs2/UpdateCell', methods=['POST'])
def update_cell():
# get request param
p = request.form.get('p')
uid = request.form.get('uid')
gwb = GridJsWorkbook()
ret = gwb.update_cell(p, uid)
return Response(ret, content_type='text/plain; charset=utf-8')
как получить обновленный результат файла
1. указанный идентификатор (UID) для файла
Убедитесь, что существует соответствие между файлом и идентификатором (UID),
вы всегда можете получить один и тот же идентификатор (UID) для заданного имени файла, а не случайно сгенерированный.
Например, достаточно использовать имя файла.
...
# get json info from : /GridJs2/DetailFileJsonWithUid?filename=&uid=
@app.route('/GridJs2/DetailFileJsonWithUid', methods=['GET'])
def detail_file_json_with_uid():
filename = request.args.get('filename')
uid = request.args.get('uid')
if not filename:
return jsonify({'error': 'filename is required'}), 400
if not uid:
return jsonify({'error': 'uid is required'}), 400
gwb = GridJsWorkbook()
file_path = os.path.join(FILE_DIRECTORY, filename)
# check file
if not os.path.isfile(file_path):
return jsonify({'error': 'file not found:'+file_path}), 404
try:
sb = gwb.get_json_str_by_uid(uid, filename)
if sb == None:
gwb.import_excel_file(uid, file_path)
sb = gwb.export_to_json(filename)
response = Response(sb, status=200, mimetype='text/plain')
response.headers['Content-Type'] = 'text/plain; charset=utf-8'
return response
except Exception as ex:
return jsonify({'error': str(ex)}), 500
2. синхронизация с клиентским интерфейсом (UI)
Фактически, для некоторых операций интерфейса (UI) клиента,
например:
смена активного листа на другой,
изменение позиции изображения,
вращать/изменить размер изображения и т. д.
действие UpdateCell не будет вызвано.
Таким образом, если мы хотим получить обновленный файл такой же, как показывает клиентский интерфейс,
нам нужно выполнить операцию слияния перед сохранением, чтобы синхронизировать операции клиентского интерфейса.
//in the js
function save() {
if (!xs.buffer.isFinish()) {
alert('updating is inprogress,please try later');
return;
}
let datas = xs.datas;
delete datas.history;
delete datas.search;
delete datas.images;
delete datas.shapes;
var jsondata = {
sheetname: xs.sheet.data.name,
actrow: xs.sheet.data.selector.ri,
actcol: xs.sheet.data.selector.ci,
datas: xs.getUpdateDatas(),
};
const data = {
p: JSON.stringify(jsondata),
uid: uniqueid,
};
....
//go on to do ajax post to trigger controller action
# in download route action
gwb = new GridJsWorkbook();
gwb.merge_excel_file_from_json(uid, p)
# after merge do save to chache or to a stream or whaterver you want to save to ,here we just save to cache
gwb.save_to_cache_with_file_name(uid, filename, None);
3. получить файл из кэша
например: в действии getfile, вы можете просто получить его из каталога кэша по uid.
mimetype=guess_mime_type_from_filename(filename)
file_path = os.path.join(Config.file_cache_directory, uid.replace('/', '.')+"."+filename)
# check file
if os.path.isfile(file_path):
return send_file(file_path, as_attachment=True, download_name=filename, mimetype=mimetype)
Для получения более подробной информации вы можете проверить пример здесь: https://github.com/aspose-cells/Aspose.Cells-for-Python-via-.NET/tree/main/Examples_GridJs_Python_Net