Travailler avec le stockage GridJs
Travailler avec le stockage GridJs
le processus général du fichier
Après avoir importé un fichier de feuille de calcul,
GridJs créera un fichier de cache avec l’uid spécifié dans le dossier Config.file_cache_directory
,
avec le format Aspose.Cells.SaveFormat.Xlsx ,
GridJs sauvegardera également toutes les formes/images dans un fichier d’archive zip dans le dossier Config.file_cache_directory
pour afficher ultérieurement les formes/images dans l’interface utilisateur du client.
et après chaque opération de mise à jour dans l’interface utilisateur du client,
par exemple, définir la valeur de la cellule, définir le style de la cellule, etc. ,
Le javascript côté client de GridJs déclenchera un appel ajax pour effectuer une opération UpdateCell.
Dans cette action, une sauvegarde dans le fichier de cache se produira pendant la méthode 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')
comment obtenir le fichier de résultat mis à jour
1. un uid spécifié pour le fichier
Assurez-vous qu’il existe une correspondance de mappage spécifiée entre le fichier et l’uid.
vous pouvez toujours obtenir le même uid pour un nom de fichier spécifié, pas généré aléatoirement.
Par exemple, utilisez simplement le nom du fichier.
...
# 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. synchroniser avec l’opération de l’interface utilisateur du client
En fait, pour certaines opérations de l’interface utilisateur du client,
par exemple :
passer à une autre feuille active,
changer la position de l’image,
faire pivoter/redimensionner l’image, etc.
l’action UpdateCell ne sera pas déclenchée.
Ainsi, si nous voulons obtenir le fichier mis à jour exactement comme l’interface utilisateur du client le montre,
nous devons effectuer une opération de fusion avant l’action de sauvegarde pour synchroniser ces opérations de l’interface utilisateur du client.
//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. obtenir le fichier depuis le cache
par exemple : dans l’action getfile, vous pouvez simplement l’obtenir depuis le répertoire cache par 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)
Pour plus d’informations détaillées, vous pouvez consulter l’exemple ici : https://github.com/aspose-cells/Aspose.Cells-for-Python-via-.NET/tree/main/Examples_GridJs_Python_Net