Vue.js взаимодействует с данными Excel: вставка нескольких строк и столбцов в таблицы пользовательского интерфейса элемента
Vue.js взаимодействует с данными Excel: вставка нескольких строк и столбцов в таблицы пользовательского интерфейса элемента

Предисловие

В современную эпоху, основанную на данных, Excel является важным инструментом обработки данных, а его функция обмена данными широко используется в повседневной работе. Однако с быстрым развитием веб-приложений растет спрос пользователей на прямую вставку данных Excel в веб-интерфейс. Прямая вставка данных из Excel в веб-таблицы, особенно в удобных веб-приложениях, созданных с использованием платформы Vue.js в сочетании с библиотекой компонентов пользовательского интерфейса Element, не только улучшает взаимодействие с пользователем, но и значительно повышает гибкость обработки данных.

В этой статье мы углубимся в то, как использовать компонент el-table элемента пользовательского интерфейса в компоненте Vue.js для реализации функции копирования нескольких строк и столбцов данных из Excel и последующей вставки их непосредственно во внешний интерфейс. Мы подробно проанализируем весь процесс реализации, в том числе способы обработки событий вставки, анализа данных буфера обмена и обновления источников данных таблиц, тем самым помогая разработчикам создавать более эффективные и удобные для пользователя веб-приложения.

Текстовый контент

1. Подготовительные работы

Перед реализацией функции копирования-вставки проверяем, что компонент ei-table правильно установлен и внедрен.

1. Знакомство с Element-UI

Во-первых, убедитесь, что Element-UI установлен и введен в ваш проект. Если он еще не установлен, используйте следующую команду для его установки:

Язык кода:bash
копировать
npm install element-ui --save

Затем,Входной файл в проекте(в целомдаmain.js)середина Представляем Element-UI:

Язык кода:javascript
копировать
import Vue from 'vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';

Vue.use(ElementUI);
2. Создайте компонент el-table.

В компоненте Vue,Создайтеel-tableкомпоненты,И определите необходимые столбцы и источник данных:

Язык кода:html
копировать
<template>
  <div>
   <el-table v-loading="loading" :data="tableData" size="mini" border style="width: 800px;">
      <el-table-column метка="Поле 1" align="center" prop="data1">
        <template slot-scope="scope">
          <el-input v-model="scope.row.data1" size="mini" Placeholder="Пожалуйста, введите поле 1" style="width: 100px;" />
        </template>
      </el-table-column>
      <el-table-column метка="Поле 2" align="center" prop="data2">
        <template slot-scope="scope">
          <el-input v-model="scope.row.data2" size="mini" Placeholder="Пожалуйста, введите поле 2" style="width: 100px;" />
        </template>
      </el-table-column>
      <el-table-column метка="Поле 3" align="center" prop="data3">
        <template slot-scope="scope">
          <el-input v-model="scope.row.data3" size="mini" Placeholder="Пожалуйста, введите поле 3" style="width: 100px;" />
        </template>
      </el-table-column>
      <el-table-column метка="Поле 4" align="center" prop="data4">
        <template slot-scope="scope">
          <el-input v-model="scope.row.data4" size="mini" Placeholder="Пожалуйста, введите поле 4" style="width: 100px;" />
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>
<script>
export default {
  data() {
    return {
      tableData: [{
        data1: null,
        data2: null,
        data3: null,
        data4: null
      }, {
        data1: null,
        data2: null,
        data3: null,
        data4: null
      }, {
        data1: null,
        data2: null,
        data3: null,
        data4: null
      }, {
        data1: null,
        data2: null,
        data3: null,
        data4: null
      }]
    }
  },
}
</script>

Эффект следующий:

2. Этапы реализации

1. Добавьте инструкции и атрибуты событий компонента.

чтобы достичь el-tableФункция вставки таблицы,мы должнысуществоватькомпонентысерединадобавить в@paste.native@cell-click и :cell-class-nameинструкцияисвойство。

Язык кода:html
копировать
<template>
<el-table v-loading="loading" :data="tableData" size="mini" border style="width: 800px;" @paste.native="handlePaste($event)" @cell-click="cellClick" :cell-class-name="cellClassName">
  <!-- определение столбца таблицы -->
</el-table>
</template>
<script>
export default {
  data() {
    return {
      tableData: [
        // табличные данные
      ],
      rowIndex: 0,
      columnIndex: 0,
    };
  },
  methods: {
    handlePaste(event) {
      // Логика обработки событий вставки
    },
    cellClick(row, column, cell, event) {
      // Логика обработки событий щелчка ячейки
    },
    cellClassName({ row, column }) {
      // Обработка информации о строках и столбцах
    }
  }
};
</script>

в:

@paste.native="handlePaste($event)":

  • @pasteда Пользовательский прослушиватель событий,Используется для прослушивания события вставки элемента.
  • "handlePaste($event)"да Вызов функции обработчика событий,Чтосередина$eventда Исходный объект события, переданный функции。

@cell-click="cellClick":

  • @cell-click да el-tableкомпонентысобытие,Он срабатывает, когда пользователь нажимает на ячейку таблицы.

:cell-class-name="cellClassName":

  • :cell-class-name да el-tableкомпонентыодин изсвойство,Он позволяет указать имя класса для каждой ячейки таблицы.
2. Реализуйте соответствующие функции cellClassName.
Язык кода:javascript
копировать
cellClassName({ row, column, rowIndex, columnIndex }) {
  row.index = rowIndex;
  column.index = columnIndex;
},

Этот метод используется для установки имени класса для каждой ячейки таблицы. Он получает параметр объекта,Содержит данные текущей строки (row), определение текущего столбца (column), индекс текущей строки (rowIndex) и индекс текущего столбца (columnIndex). В этом методе,Он присваивает индексы строк и столбцов строкам row.index и columns.index соответственно.

3. Реализуйте соответствующие функции cellClick.
Язык кода:javascript
копировать
cellClick(row, column) {
  this.rowIndex = row.index;
  this.columnIndex = column.index;
},

Этот метод вызывается, когда пользователь щелкает ячейку в таблице. Он получает четыре параметра: данные текущей строки (строки)、Определение текущего столбца (столбца)、щелкнулDOMэлемент(cell)исобственный объект события(event)。существоватьэтот методсередина,Он сохраняет индекс текущей строки и столбца в свойстве данных компонента.

4. Реализуйте соответствующие функции handlePaste.
Язык кода:javascript
копировать
handlePaste(event) {
  // Предотвратите поведение вставки по умолчанию и всплытие событий.
  event.preventDefault()
  event.stopPropagation()
  // Получите данные буфера обмена и извлеките обычный текстовый контент.
  const clipboardData = event.clipboardData
  const text = clipboardData.getData('text/plain');
  // Разделите текстовое содержимое по строкам и табуляциям и преобразуйте его в двумерный массив.
  let pastedText = text.split('\n').map((row) => { return row.split('\t').map((ele) => { return parseFloat(ele) }) });
  // Инициализирует объект для сопоставления данных столбца таблицы.
  let object = {
    data1: null,
    data2: null,
    data3: null,
    data4: null,
  }
  // Просмотрите и обработайте каждую строку данных и заполните данные в таблице в соответствии с индексом строки и индексом столбца.
  pastedText.forEach((ele1, index) => {
    if (this.rowIndex + index <= this.tableData.length - 1) {
      let item = JSON.parse(JSON.stringify(this.tableData[this.rowIndex + index]))
      let num = 0;
      let keyIndex = 0;
      // Используйте циклы и условные оценки, чтобы заполнить обработанные данные в клонированный объект строки по индексу столбца.
      for (var key in object) {
        if (num < ele1.length && keyIndex >= this.columnIndex) {
          item[key] = ele1[num] || ele1[num] == 0 ? ele1[num] : null
          // Используйте this.$set(), чтобы вернуть обновленному объекту строки табличные значения. данныесередина
          this.$set(this.tableData, this.rowIndex + index, item)
          num++;
        }
        keyIndex++;
      }
    }
  })
}

в практическом применении,Он также должен основываться на конкретной бизнес-логике и требованиях.,Настройте и оптимизируйте приведенный выше код.

3. Меры предосторожности

В процессе реализации приведенного выше кода необходимо обратить внимание на следующие вопросы:

1. Привязка функций обработки событий

-убеждатьсяcellClassNamecellClickиhandlePasteМетод правильно привязан ккомпоненты Пример,чтобы можно было получить доступ к правильному контексту при возникновении события(this)。

2. Преобразование типов данных

При работе со вставленными данными,использоватьparseFloatФункция преобразования строки в число с плавающей запятой。Это требуетубеждаться Вставленные данныеда Можно преобразовать в числа,В противном случае результат преобразования будетдаNaN

3. Проверка границ

существоватьhandlePasteметодсередина,Вам необходимо проверить, не превысят ли вставленные данные ограничение на количество строк таблицы. В примере кода,проходитьif (this.rowIndex + index <= this.realAlarmTable.length - 1)выполненный Проверка границ。

4. Обеспечьте действительные значения

В приведенном выше коде item[key] = ele1[num] || ele1[num] == 0 ? ele1[num] : nullсередина,Я убедился, что данные да являются допустимым значением (включая 0),Только тогда будут обновлены соответствующие свойства объекта данных строки таблицы. Если данные недействительны,затем установите для этого свойства значение null,Поэтому мы решаем это в соответствии с реальной ситуацией в нашем проекте.

4. Дисплей эффектов

1. Скопируйте исходные данные

Мы открываем лист Excel или CSV, находим лист или источник данных, содержащий необходимые данные, и выбираем строку или столбец данных для копирования.

2. Выберите целевую таблицу

Открываем рабочий лист данных, который необходимо пакетно вставить в проект, и определяем стартовую ячейку рабочего листа для вставки данных.

3. Вставка данных

Щелкните правой кнопкой мыши начальную ячейку и выберите пункт «Вставить» во всплывающем меню или используйте сочетание клавиш Ctrl+V для вставки. Данные успешно вставлены в целевой лист.

Мы можем вставлять данные в разные начальные позиции.

Подвести итог

В этой статье в основном представлены методы работы и меры предосторожности при вставке данных в различных сценариях.,А также конкретные шаги и примеры кода для вставки многострочных и многостолбцовых данных из Excel в el-таблицу внешнего интерфейса в компоненте Vue.js. Может помочь нам настроить эффективную функцию импорта данных,Тем самым улучшая пользовательский опыт.

наконец,Благодарим партнеров сообщества разработчиков Tencent Cloud за сотрудничество.,Если вам нравится контент моего блога,Примите мое мнение и поделитесь опытом,Ставьте лайк, ставьте лайк и комментируйте,Это будет моей самой большой поддержкой и поощрением. в то же время,Мы также приветствуем ваши ценные комментарии и предложения.,Позвольте мне лучше улучшить и усовершенствовать мой блог. Спасибо!

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода