Vue. js превосходит json - PullRequest
       14

Vue. js превосходит json

1 голос
/ 10 апреля 2020

Я попытался прочитать файлы Excel с помощью vue. js, но вы можете, как только я прочитаете файл, память начнет лететь с небес, как 5 ГБ ОЗУ, и я получаю файл Excel очень маленького размера. Пожалуйста, помогите, чтобы преобразовать file to json Метод vue для обработки файла Excel. Я перепробовал все опции типа, которые я видел в documintation , но все они посылают мне разные ошибки. Я видел похожий вопрос здесь но все еще не может решить эту проблему при попытке

  • base64: "Ошибка типа: input.replace не является функцией"
  • двоичная: "Ошибка типа: x.charCodeAt не является функцией"
  • строка: «Ошибка типа: data.match не является функцией» * Массив 1012 *
  • : это тот, который заставляет память войти в 5 ГБ

Также при попытке используйте новую программу чтения файлов, как указано в документации, при создании программы чтения. Загрузите функцию, которая никогда не выполнялась. фактический шаблон я попробовал две вещи. когда я использую буфер, кажется, он работает, но все функции возвращают пустой массив. как файл пуст, но это не

оба способа сделали то же самое

<v-file-input
    v-on:change="displayFile($event)"
    v-model="file">
    </v-file-input>
    <input type="file" name="xlfile" id="xlf" v-on:change="displayFile($event)" />

displayFile: function (event) {
  // console.log(event.target.files[0])
  // const file = event.target.files[0]
  // const workbook = XLSX.read(file, {
  //   type: 'string'
  // })
  // console.log(workbook, workbook.SheetNames)

  // const res = XLSX.read(file)
  // console.log(res)
  // const res = XLSX.read(this.file)
  // console.log(res)
  console.log(this.file)
  this.file.text().then(text => {
    const fileType = this.file.type
    console.log(fileType)
    // this.PropceseMethod(this.file, fileType)
  })
  const reader = new FileReader()
  reader.onload = (data) => {
    console.log('HERE')
    console.log(data)
    const workbook = XLSX.read(data, {
      type: 'buffer'
    })
    console.log(workbook)
    workbook.SheetNames.forEach(function (sheetName) {
      console.log(sheetName)
      console.log(workbook.Sheets[sheetName])
      // Here is your object
      const XLRowObject = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName])
      console.log(XLSX.utils.sheet_to_json(workbook.Sheets[sheetName]))
      console.log(XLRowObject)
      const jsonObject = JSON.stringify(XLRowObject)
      console.log(jsonObject)
    })
  }
  reader.onerror = function (ex) {
    console.log(ex)
  }
  reader.readAsText(this.file)
}

1 Ответ

0 голосов
/ 10 апреля 2020

, чтобы справиться с этим, мне пришлось изменить способ чтения файла. Когда я использовал readAsBinaryString, он работает, и платите, используя тип двоичный с этим. Эта функция читает только первый лист

fileToJson (e) {
  const file = e.target.files[0]
  /* Boilerplate to set up FileReader */
  const reader = new FileReader()
  reader.onload = (e) => {
    /* Parse data */
    const bstr = e.target.result
    const wb = XLSX.read(bstr, { type: 'binary' })
    /* Get first worksheet */
    const wsname = wb.SheetNames[0]
    const ws = wb.Sheets[wsname]
    /* Convert array of arrays */
    const data = XLSX.utils.sheet_to_json(ws, { header: 1 })
    /* Update state */
    this.data = data
    const header = data.shift()
  }
  reader.readAsBinaryString(file)
}
...