GridJs depolama ile çalışmak

GridJs Depolama ile Çalışmak

genel dosya işlemi

Bir elektronik tablo dosyası içe aktarıldıktan sonra,

GridJs, Config.FileCacheDirectory klasöründe belirtilen uid ile bir önbellek dosyası oluşturacaktır,

Aspose.Cells.SaveFormat.Xlsx formatında,

GridJs ayrıca istemci arayüzünde daha sonra şekilleri/görüntüleri göstermek için bir zip arşiv dosyasına tüm şekilleri/görüntüleri kaydeder, Config.PictureCacheDirectory klasörüne.

ve istemci arayüzünde her güncelleme işleminden sonra,

örneğin hücre değeri ayarla, hücre stili ayarlama, vb.,

GridJs istemci tarafı js, bir GüncellemeHücresi işlemi yapmak için bir denetleyici eylemi tetikler.

Bu eylem sırasında, Bir GüncellemeHücre yöntemi sırasında önbellek dosyasına bir kayıt gerçekleşecektir.

        // 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);
        }

önbellek dosya aslında nerede

A. Eğer GridCacheForStream uygularsak ve GridJsWorkbook.CacheImp’i ayarlarsak. örneğin aşağıdaki kodda “D:\temp” dizinine sadece önbellek dosyasını yerleştirebilir ve alabiliriz.

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;
        }
		...

B. Eğer GridJsWorkbook.CacheImp’i ayarlamazsak,

GridJs, Config.FileCacheDirectory içindeki, yani ayarlayabileceğimiz varsayılan önbellek dizininde bir dosya oluşturur ve kaydeder.

güncellenmiş sonuç dosyasını nasıl alınır

1. dosya için belirtilen bir uid

Dosya ve uid arasında belirli bir eşleme bağlantısının olması gerektiğinden emin olun,

bir dosya adı için her zaman aynı uid’yi alabilirsiniz, rastgele oluşturulmaz.

Örneğin, sadece dosya adını kullanmak yeterlidir.

//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. istemci arayüzü işlemi ile senkronize olun

Aslında bazı istemci arayüzü işlemleri için,

örneğin:

etkin sayfayı başka bir sayfaya değiştir,

resmin pozisyonunu değiştir,

resmi döndür/boyutlandır, vb.

GüncellemeHücre eylemi tetiklenmeyecektir.

Bu nedenle, güncellenmiş dosyayı istemci arayüzünün gösterdiği gibi almak istiyorsak,

bu istemci arayüzü işlemlerini senkronize etmek için kaydetme işleminden önce bir birleştirme işlemi yapmamız gerekmektedir.

//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. önbellekten dosyayı alın

örneğin: indirme işlemi için, uid ile doğrudan önbellek dizininden alabilirsiniz.

//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
            };
        }

Daha fazla detaylı bilgi için buradaki örneği kontrol edebilirsiniz: https://github.com/aspose-cells/Aspose.Cells-for-.NET/tree/master/Examples_GridJs