0

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

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

感谢您提供的任何建议。

在此处输入图像描述

4

1 回答 1

1

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

要打开 iCloud,您必须向 Apple 支付开发者费用并选择相关选项。我发现文章“使用 iOS 11 中的文件应用程序”有助于启动此过程。

我在使用 datatables-buttons 将 Excel 文件保存到设备时遇到问题,但我可以通过更新 datatables.js 将其作为 .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 示例:写入文件”,该文章对代码有所帮助)

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

于 2018-07-30T03:55:42.503 回答