我需要实现一个功能:当用户从Microsoft Excel复制单元格并将它们粘贴到Reaction表中时,它也需要携带它们的样式(比如bolditalicized或下划线).

我使用剪贴板API获取数据,并成功地获取了文本/纯文本或文本/html格式的数据.

const handlePaste = async (event: any) => {
    const clipboardContents = await navigator.clipboard.read();
    
    var textHtmlBlob : any;
    
    for (const item of clipboardContents) 
    { 
        textHtmlBlob = await item.getType("text/html");
    }

    console.log(await textHtmlBlob.text());
}

这样,我就得到了HTML表.我看到它有像"xl65","xl66","xl67"这样的课程.

<table border="0" cellpadding="0" cellspacing="0" width="64" style="border-collapse:collapse;width:48pt">
  <tbody>
    <tr height="19" style="height:14.5pt">
      <td height="19" class="xl65" align="right" width="64" style="height:14.5pt;width:48pt">1</td>
    </tr>
  </tbody>
</table>

我调查了一下,如果我使用一个粗体/下划线/斜体单元格,该单元格将只有一个类"xl65",因此我无法区分该单元格在Excel中是如何设置样式的.

但我注意到,如果我全部使用这三个选项,"xl65"表示斜体单元格,"xl66"表示带下划线的单元格,"xl67"表示粗体单元格.

所以,我的问题是,我如何区分这些类,这样我就可以应用CSS样式,使它们看起来像是想要的那样.

推荐答案

原来,您可以使用event.clipboardData?.getData("text/html");来获取文本格式的HTML,在它的内部,您将在<head> </head>元素中有<style> </style>部分,在那里您可以找到所有样式,包括类xl65和其他类的样式定义.

const handlePaste = async (event: ClipboardEvent) => {
    event.clipboardData?.getData("text/html");
}

Reactjs相关问答推荐

CSS转换不适用于React MUI对象

有正确的方法来设置我的金牛座应用程序的图标吗?

为什么Next.js 14无法解析页面路由路径?

利用OVERPASS API端点计算某建筑的表面积

TanStack/Reaction-Query在我的Vercel应用程序中不起作用

如何使用TouchStart/TouchEnd在Table ReactJS中交换位置?

状态更改时的rtk查询触发器

StrictMode+SetInterval=双重渲染(即使使用useEffect清理)

在reduce()方法上得到NaN

在MongoDB中,如何获取最后N条记录中字段不为空或不为空字符串的数据

Firebase Storage: 对象不存在图片上传路径错误

使用 MuiCssBaseline 在所有 MUI v5 标签上设置边距 0

需要先填写依赖输入字段,以便其他人工作

MUI - ButtonGroup fullWidth 条件屏幕大小不起作用?

Wordpress 插件在激活时创建一个 React Public 页面

如何使用 React 在客户端获取 nestjs websocket 异常错误?

响应式媒体 React Tailwind

如何将我的 ID 值传递给下一个组件?

如何使用 babel 将 SVG 转换为 React 组件?

Material UI 安装和 React v. 18.2 出现问题