1.0.0 • Published 2 years ago

@lbingxin/sheet v1.0.0

Weekly downloads
-
License
ISC
Repository
github
Last release
2 years ago

sheet 在线 Excel 编辑组件—支持导入导出

@lbingxin/sheet 组件是对开源组件 x-data-spreadsheet 进行二次封装,更易于使用。同时添加了补丁修复,集成 Excel 导入、导出功能。

安装

npm

npm i @lbingxin/sheet

yarn

yarn add @lbingxin/sheet

引入

import Vue from "vue";
import Sheet from "@lbingxin/sheet";
import "@lbingxin/sheet/dist/sheet.css";
Vue.use(Sheet);

使用方式

基础使用方式

<template>
  <sheet v-model="sheetData"></sheet>
</template>
<script>
export default {
  data() {
    return {
      sheetData: [
        {
          name: "sheet1",
          rows: {
            0: {
              cells: {
                0: {
                  text: "name",
                },
                1: {
                  text: "小明",
                },
              },
            },
            1: {
              cells: {
                0: {
                  text: "age",
                },
                1: {
                  text: "20",
                },
              },
            },
            len: 100,
          },
        },
      ],
    };
  },
};
</script>

属性

参数类型默认值说明
modeStringedit只读或可编辑模式,可选值 edit | read
showToolbarBooleantrue显示工具栏
showBottomBarBooleantrue显示底部工具栏
showGridBooleantrue显示网格
showContextmenuBooleantrue鼠标右键显示菜单
widthNumber-设置宽度,只能是数值
heightNumber-设置高度,只能是数值
rowObject{ len: 100, height: 25}设置行信息,len 为显示的行数,height 为行的高度
colObject{ len: 26, width: 100, indexWidth: 60,minWidth: 60 }设置列信息,len 为显示的列数,width 为列的宽度, 左边序列栏默认宽度 indexWidth ,以及每个列默认最小宽度 minWidth
stylesObject如下设置 excel 样式

styles 默认配置

styles: {
    // 背景颜色
    bgcolor: '#ffffff',
    // 水平对齐方式
    align: 'left',
    // 垂直对齐方式
    valign: 'middle',
    // 是否需要换行
    textwrap: false,
    // 虚线边框
    strike: false,
    // 下画线
  underline: false,
    // 文字颜色
    color: '#0a0a0a',
    // 字体设置
    font: {
      // 字体
      name: 'Helvetica',
      // 字号大小
      size: 10,
      // 是否加粗
      bold: false,
      // 斜体
      italic: false,
    },
  }

导入导出

<template>
  <div>
    <button @click="handleExport">导出</button>

    // input file 导入
    <label for="file" style="margin: 0 8px; line-height: 28px">导入</label>
    <input
      id="file"
      type="file"
      style="display: none"
      @change="handleImport1"
    />

    // element-ui 导入
    <el-upload
      action=""
      :auto-upload="false"
      :show-file-list="false"
      :before-upload="() => false"
      :on-change="handleImport2"
    >
      <el-button type="primary" size="mini">上传 </el-button>
    </el-upload>
    <sheet v-model="sheetData" ref="sheet"></sheet>
  </div>
</template>
<script>
export default {
  methods: {
    /**
     * @params{string} name 导出文件名称
     * @params{string} ext 后缀名称 xls/xlsx 默认 xlsx
     */
    handleExport() {
      this.$refs.sheet.export("2022-07-16表单");
    },
    handleImport1(files) {
      this.$refs.sheet.import(files);
    },
    handleImport2(file) {
      this.$refs.sheet.import(file.raw);
    },
  },
};
</script>