前端预览 Csv,Excel文件

kingcwt2022-07-27前端react antd

后端返回一个文件地址链接,然后前端预览,记录一下 简单的插件及其预览实现的代码

Csv 转换为Table 预览

/**
 * SeriesModelDetail组件
 * 只展示csv相关代码
 */
import { usePapaParse } from 'react-papaparse'

const SeriesModelDetail: React.FC<Props> = () => {
  const { readRemoteFile } = usePapaParse()
  const [columns, setColumns] = useState<any[]>([])
  const [data, setData] = useState<any[]>([])


// 数据格式化为Table数据格式
const handleComplete = (file:{data:any[], meta:any, [propsName:string]:any}) => {
    const column:any[] = []
    Array.isArray(file?.meta.fields) && file?.meta.fields.forEach((item: any) => {
      column.push({ title: item, dataIndex: item, key: item })
    })
    setColumns(column)
    const newData:any[] = []
    Array.isArray(file.data) && file.data.forEach((i, rowKey) => {
      newData.push({ ...i, rowKey })
    })
    setData(newData)
  }

//Csv
const analysisCsvData = () => {
  // currentDocument.link 代表后端返回的远程文件地址链接
    return (
      readRemoteFile(currentDocument.link, {
        header: true,
        download: true,
        complete: handleComplete
      })
    )
  }
  
  return (      
    <Table scroll={{ x: 800 }} rowKey={(item) => item.rowKey} columns={columns} dataSource={data}></Table>
)
}
export default SeriesModelDetail

Excel 转换为Table 预览

import { read, utils } from 'xlsx'
const SeriesModelDetail: React.FC<Props> = () => {

  const [sheetColumnscolumns, setSheetColumns] = useState([])
  const [rows, setRows] = useState([])

  const analysisSheetData = async () => {
      const wb = read(await (await fetch(currentDocument.link)).arrayBuffer(), { type: 'array', cellDates: true, cellNF: false, cellText: false })
      const data:any = utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]], { header: 1, raw: false, dateNF: 'yyyy-mm-DD h:mm' })
      setSheetColumns(data[0].map((r: any) => ({ dataIndex: r, title: r })))
      setRows(data.slice(1).map((r: any[]) => r.reduce((acc, x, i) => {
        acc[data[0][i]] = x
        return acc
      }, {})))
    }

    return(
      <Table scroll={{ x: 800 }} rowKey={(item) => item.date} columns={sheetColumnscolumns} dataSource={rows}></Table>
    )

}

其他预览库:

Last Updated 10/16/2023, 7:06:22 AM
What do you think?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8