【问题标题】:Is it possible to save an Excel file to ios device using cordova/phonegap datatables buttons?是否可以使用 cordova/phonegap 数据表按钮将 Excel 文件保存到 ios 设备?
【发布时间】:2018-07-19 23:14:37
【问题描述】:

在我的应用程序中,我有一个使用数据表动态显示的表格,并启用了“csv”和“excel”按钮。在 ios 模拟器上,Excel 文件打开,但没有保存它的选项等。是否可以将文件下载到设备上?当我通过典型网站使用数据表按钮时,文件会自动下载到浏览器中。

抱歉,我是 phonegap 等的新手,所以如果这是一个愚蠢的问题,我深表歉意。

感谢您提供的任何建议。

【问题讨论】:

    标签: cordova datatables datatable-buttons


    【解决方案1】:

    通过使用插件:cordova-plugin-file,您可以保存到文档目录“cordova.file.documentsDirectory”。默认情况下,此目录与 iCloud 共享,因此可以通过 ios File 文件夹打开保存在此处的文件,然后用户可以选择文件并点击共享图标以使用适当的应用程序(例如 Numbers 等)打开。

    要打开 iCloud,您必须向 Apple 支付开发者费用并选择相关选项。我发现文章 "Working with the Files App in iOS 11" 对开始这个过程很有帮助。

    我在使用 datatables-buttons 将 Excel 文件保存到设备时遇到了问题,但我可以通过更新 datatables.js 将 Excel 文件保存为 .csv 文件。

    在您的平台 datatables.js 文件中:

    //In your datatables file go to the following section:
    
    //
    // CSV export
    //
    DataTable.ext.buttons.csvHtml5 = {
    ....
      //comment out
      /*
    		_saveAs(
    			new Blob( [output], {type: 'text/csv'+charset} ),
    			info.filename,
    			true
    		);
      */
      //add a call to this new function
      saveToDeviceDocuments(info.filename, output)
    ....
    }
    
    //add the function somewhere
    //<!-- Save CSV file to iOS Files -->
    saveToDeviceDocuments = (filename, csvText) => {
      document.addEventListener('deviceready', onDeviceReady, false);
      var logOb;
      
      function fail(e) {
          console.log("FileSystem Error");
          console.dir(e);
      }
    
      function onDeviceReady() {
        window.resolveLocalFileSystemURL(cordova.file.documentsDirectory, function(dir) {
          console.log("got main dir =" + dir);
          dir.getFile(filename, {create:true}, function(file) {
            console.log("got the file", file);
            logOb = file;
            writeLog(csvText);            
          });
        });
      }
    
      function writeLog(str) {
        if(!logOb) return;
        logOb.createWriter(function(fileWriter) {     
          fileWriter.seek(fileWriter.length);    
          var blob = new Blob([str], {type:'text/plain'});
          fileWriter.write(blob);
          console.log("ok, in theory i worked");
          $(".buttons-csv").html("Spreadsheet saved to files!")
        }, fail);
      }
    
      function justForTesting() {
        logOb.file(function(file) {
          var reader = new FileReader();
          reader.onloadend = function(e) {
            console.log(this.result);
          };
          reader.readAsText(file);
        }, fail);
      }
    
      setTimeout(justForTesting, 2000)
    }
    (感谢 Raymond Camdon 的文章 "Cordova Example: Writing to a file",它对代码有所帮助)

    希望这对某人有所帮助,作为一个新的爱好者开发者,我花了很长时间才将这些线索放在一起。我希望我能以 Excel 格式保存它,但我找不到任何方法来更新 _jszip 以保存在浏览器以外的任何地方。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多