العمل مع تخزين GridJs

العمل مع تخزين GridJs

عملية الملف العامة

بعد استيراد ملف ورقة انتشار ،

سيقوم GridJs بإنشاء ملف ذاكرة تخزين مؤقت باستخدام معرف المستخدم المحدد في ملف**“Config.FileCacheDirectory”** مجلد ،

بتنسيقAspose.Cells.SaveFormat.Xlsx ,

سيحفظ GridJs أيضًا جميع الأشكال / الصور في ملف أرشيف مضغوط بتنسيق**“Config.PictureCacheDirectory”** مجلد لعرض الأشكال / الصور لاحقًا في واجهة مستخدم العميل.

وبعد كل عملية تحديث في واجهة مستخدم العميل ،

على سبيل المثال ، قم بتعيين قيمة الخلية ، وتعيين نمط الخلية ، وما إلى ذلك. و

سيطلق تطبيق js من جانب عميل GridJs إجراء وحدة التحكم للقيام بعملية UpdateCell.

في هذا الإجراء ، سيحدث حفظ مرة أخرى إلى ملف ذاكرة التخزين المؤقت أثناء طريقة UpdateCell.

        // post: /GridJs/UpdateCell
        [HttpPost] 
        public ActionResult UpdateCell( )
        {
            string p = HttpContext.Request.Form["p"];
            string uid = HttpContext.Request.Form["uid"];
            GridJsWorkbook gwb = new GridJsWorkbook();
            String ret = gwb.UpdateCell(p, uid);
            return Content(ret, "text/plain", System.Text.Encoding.UTF8);
        }

أين هو ملف ذاكرة التخزين المؤقت في الواقع

A. إذا قمنا بتطبيق GridCacheForStream وقمنا بتعيين GridJsWorkbook.CacheImp. على سبيل المثال في الكود أدناه ، يمكننا فقط وضع ملف ذاكرة التخزين المؤقت والحصول عليه من**“D: \ temp”**

Config.FileCacheDirectory=@"D:\temp";
GridJsWorkbook.CacheImp=new LocalFileCache();
public class LocalFileCache  : GridCacheForStream
    {
         
        /// <summary>
        /// Implement this method to savecache,save the stream to the cache object with the key id.
        /// </summary>
        /// <param name="s">the source stream </param>
        /// <param name="uid">the key id.</param>
        public override void SaveStream(Stream s, String uid)
        {//make sure the directory exist
            String filepath = Path.Combine(Config.FileCacheDirectory, uid);
            using (FileStream fs = new FileStream(filepath, FileMode.Create)) 
            {
                s.Position = 0;
                s.CopyTo(fs);
            }

        }

        /// <summary>
        /// Implement this method to loadcache with the key uid,return the stream from the cache object.
        /// </summary>
        /// <param name="uid">the key id</param>
        /// <returns>the stream from  the cache</returns>
        public override Stream LoadStream(String uid)
        {//make sure the directory is exist
            String filepath = Path.Combine(Config.FileCacheDirectory, uid);;
            FileStream fs = new FileStream(filepath, FileMode.Open);
            return fs;
        }
		...

إذا لم نقم بتعيين GridJsWorkbook.CacheImp ،

سيقوم GridJs بإنشاء ملف وحفظه داخل ملف**“Config.FileCacheDirectory”** ، وهو دليل ذاكرة التخزين المؤقت الافتراضي الذي يمكننا تعيينه.

كيفية الحصول على ملف النتائج المحدث

1. معرف مستخدم محدد للملف

تأكد من تطابق الخرائط المحدد بين الملف والمعرف ،

يمكنك دائمًا الحصول على نفس معرف المستخدم لاسم ملف محدد ، وليس من إنشاء عشوائي.

على سبيل المثال فقط استخدم اسم الملف على ما يرام.

//in controller  
...
        public ActionResult Uidtml(String filename)
        {
 
            return Redirect("~/xspread/uidload.html?file=" + filename + "&uid=" +  Path.GetFileNameWithoutExtension(filename));
        }
 ...
        public ActionResult DetailFileJsonWithUid(string filename,string uid)
        {
            String file = Path.Combine(TestConfig.ListDir, filename);
            GridJsWorkbook wbj = new GridJsWorkbook();
            //check if already in cache
           StringBuilder sb= wbj.GetJsonByUid(uid, filename);
            if(sb==null)
            {
                Workbook wb = new Workbook(file);
                wbj.ImportExcelFile(uid, wb);
                sb = wbj.ExportToJsonStringBuilder(filename);
            }

            return Content(sb.ToString(), "text/plain", System.Text.Encoding.UTF8);
        }

2. مزامنة مع عملية واجهة المستخدم العميل

في الواقع بالنسبة لبعض عمليات واجهة مستخدم العميل ،

على سبيل المثال:

تبديل ورقة النشاط إلى ورقة أخرى ،

تغيير موقع الصورة ،

تدوير / تغيير حجم الصورة ، وما إلى ذلك.

لن يتم تشغيل إجراء 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 controller action 
  GridJsWorkbook wb = new GridJsWorkbook();
  wb.MergeExcelFileFromJson(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
  wb.SaveToXlsx(Path.Combine(Config.FileCacheDirectory, uid));

3. الحصول على الملف من ذاكرة التخزين المؤقت

على سبيل المثال: في إجراء التنزيل ، يمكنك فقط الحصول عليه من دليل ذاكرة التخزين المؤقت بواسطة uid.

//in controller  

        public async Task<IActionResult> DownloadfromBytes(string uid,string ext)
        {
            byte[] byteArr = await System.IO.File.ReadAllBytesAsync(Path.Combine(Config.FileCacheDirectory, uid) );
            string mimeType = "application/octet-stream";
            return new FileContentResult(byteArr, mimeType)
            {
                FileDownloadName = uid+ ext
            };
        }

لمزيد من المعلومات التفصيلية ، يمكنك التحقق من المثال هنا: https://github.com/aspose-cells/Aspose.Cells-for-.NET/tree/master/Examples_GridJs