Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将indexeddb对象存储导出到.csv_Java_Csv_Export_Indexeddb - Fatal编程技术网

Java 将indexeddb对象存储导出到.csv

Java 将indexeddb对象存储导出到.csv,java,csv,export,indexeddb,Java,Csv,Export,Indexeddb,我有一个需要导出或下载为.csv文件的对象存储。我做了一些搜索,但似乎找不到有关此函数的信息。欢迎不使用IDB的回复 一些背景:这是一个工作项目的一部分,我在没有任何编码知识的情况下参与了这个项目。我使用的是公司发行的chromebook,所以(据我所知)NPM安装不可用 应用程序背景:该项目是通过单个终端进行的客户调查。这个终端就是我的chromebook,如果我能成功地将用户输入下载到.csv文件中,我希望能转移到ipad上 到目前为止,我所拥有的: (function leadIDB(

我有一个需要导出或下载为.csv文件的对象存储。我做了一些搜索,但似乎找不到有关此函数的信息。欢迎不使用IDB的回复

一些背景:这是一个工作项目的一部分,我在没有任何编码知识的情况下参与了这个项目。我使用的是公司发行的chromebook,所以(据我所知)NPM安装不可用

应用程序背景:该项目是通过单个终端进行的客户调查。这个终端就是我的chromebook,如果我能成功地将用户输入下载到.csv文件中,我希望能转移到ipad上

到目前为止,我所拥有的:

  (function leadIDB() {

window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB|| window.msIndexedDB;

if (!window.indexedDB) {
  alert('indexDB not supported in this browser');
}

let request = window.indexedDB.open("leadDB", 1),
  db,
  tx,
  store,
  index;

request.onupgradeneeded = function(e) {
  let db = request.result,
    store = db.createObjectStore("LeadStore", {keyPath: "leadID", autoIncrement: true});
      index = store.createIndex("firstName", "firstName", {unique: false});
};

request.onerror = function(e) {
  console.log("There was an error: " + e.target.errorCode);
};

request.onsuccess = function(e) {
  db = request.result;
  tx = db.transaction("LeadStore", "readwrite");
  store = tx.objectStore("LeadStore");
  index = store.index("firstName");

  db.onerror = function(e) {
    console.log("ERROR" + e.target.errorCode);
  };

  store.put(newLead);


  let lead = store.getAll();

  lead.onsuccess = function() {
    console.log(lead.result);
    console.log(lead.result.firstName);
  };


  tx.oncomplete = function() {
    console.log('Item added to LeadDB');
    db.close();
  };
 };
})();

你在正确的轨道上。还有几件事要做。首先,将数据从indexedDB加载到js内存后,需要能够继续处理。接下来,您需要在内存中生成CSV文件(作为一个巨大的字符串)。接下来,您需要将csv字符串转换为(实现的)。最后,您希望触发文件的下载

有几种方法可以完成第一步。我打算用一个承诺,但你可以通过回电话或任何你喜欢的方式来实现

function loadData() {
  return new Promise((resolve, reject) => {
    var openrequest = indexedDB.open(...);
    openrequest.onupgradeneeded = ...;
    openrequest.onerror = event => reject(event.target.error);
    openrequest.onsuccess = event => {
      var db = event.target.result;
      var txn = db.transaction(...);
      var store = txn.objectStore(...);
      var loadrequest = store.getAll();
      loadrequest.onerror = event => reject(event.target.error);
      loadrequest.onsuccess = event => {
        var data = event.target.result;
        resolve(data);
      };
    };
  });
}

// You could call the function like this for example:
async function foo() {
  var data = await loadData();
  console.log('loaded the data, loaded %d objects', data.length);
}
接下来,要将数据转换为csv格式的字符串

// This is not perfect, just an example of getting you closer
function toCSV(data) {
  var output = [];
  for(var object of data) {
    var row = [];
    for(var prop in object) {
      row.push(to_csv_value(object[prop]));
      row.push(',');
    }
    row.push('\n');
    output.push(row.join(''));
  }

  return output.join('');
}

function to_csv_value(value) {
  var output = '"';
  output += value.replace('"', '\\"');
  return output + '"';
}

// and then to compose it for example:
async function foo() {
  var data = await loadData();
  var csvstring = toCSV(data);
}
接下来,您要创建一个文件。您可以使用Blob构造函数来实现这一点。如下所示:

// Because File implements blob interface, we are effectively creating a file
// by creating a blob
function createCSVFileFromString(string) {
  var csv_mime_type = 'text/csv';
  return new Blob([string], {type: csv_mime_type});
}

// And again, to compose it:
async function foo() {
  var data = await loadData();
  var string = toCSV(data);
  var blob = createCSVFileFromString(string);
}
function downloadBlob(blob, filename) {
  var anchor = document.createElement('a');
  anchor.setAttribute('download', filename);
  var url = URL.createObjectURL(blob);
  anchor.setAttribute('href', url);
  anchor.click();
  URL.revokeObjectURL(url);
}

// And finally, to compose it all together
async function loadAndStartDownloadingData() {
  var data = await loadData();
  var csvstring = toCSV(data);
  var blob = createCSVFileFromString(csvstring);
  downloadBlob(blob, 'mydata.csv');
}
下一步是使blob可下载。这通常可以使用对象url策略来完成。有点像这样:

// Because File implements blob interface, we are effectively creating a file
// by creating a blob
function createCSVFileFromString(string) {
  var csv_mime_type = 'text/csv';
  return new Blob([string], {type: csv_mime_type});
}

// And again, to compose it:
async function foo() {
  var data = await loadData();
  var string = toCSV(data);
  var blob = createCSVFileFromString(string);
}
function downloadBlob(blob, filename) {
  var anchor = document.createElement('a');
  anchor.setAttribute('download', filename);
  var url = URL.createObjectURL(blob);
  anchor.setAttribute('href', url);
  anchor.click();
  URL.revokeObjectURL(url);
}

// And finally, to compose it all together
async function loadAndStartDownloadingData() {
  var data = await loadData();
  var csvstring = toCSV(data);
  var blob = createCSVFileFromString(csvstring);
  downloadBlob(blob, 'mydata.csv');
}
然后,在您的应用程序中的某个地方,比如说,单击按钮,您将执行如下操作。我在这里使用非异步语法,只是在非等待中使用promise的例子,您要始终小心不要隐藏错误

var button = ...;
button.onclick = function(event) {
  // Load the data and trigger the download, and send any problems to console
  loadAndStartDownloadingData().catch(console.warn);
};

请注意,这不包括插入数据,但我相信您可以解决这一问题。

没有函数可以为您执行此操作,您需要编写一个小脚本。你有没有自己尝试过的代码。我真的不知道从哪里开始检索对象存储和下载CSV。我在上面附加了我的问题,以包含创建项目并将其添加到对象存储的代码。谢谢!由于IDB记录HTML表单输入,这是否包括插入数据?如果我可以问一下,你能否进一步澄清所需的步骤?我创建了对象存储,用户输入当前正在登录到数据库中。如果我错了,请纠正我,在关闭数据库之前,我需要:-使用getAll()方法检索数据-将这些对象转换为字符串(不完全确定IDB如何转换)-从该字符串构造blob(关于该主题有大量文献)-使blob可下载-将下载函数绑定到触发器(我将使用按钮)