从Excel复制到网页时如何获得实际价值

时间:2018-11-11 23:27:14

标签: javascript excel

我在HTML页面中有一个简单的JavaScript代码,该代码可以从excel中粘贴内容,并按"\t"进行拆分,然后将其放入HTML表中。 像这样的东西-http://jsfiddle.net/duwood/sTX7y/

在Excel中,我有一个值为1.2562的单元格,并且此单元格的数字格式为2小数位时,Excel显示1.26。当我将此单元格复制/粘贴到HTML页面时,仅复制1.26。当我粘贴到另一个Excel文档时,将粘贴实际值,但前提是源Excel文件仍处于打开状态。

有什么方法可以使用JavaScript从剪贴板中获取实际的单元格值?

1 个答案:

答案 0 :(得分:1)

剪贴板格式

从应用程序复制数据时,它会将不同格式的不同数据发送到剪贴板。因此,您可以执行以下操作:复制文件,然后将实际文件粘贴到目录中,或仅粘贴到文本文档中的路径。

同样,应用程序已准备好理解一组特定的格式。

其中一些格式是标准格式。其他的是应用程序独有的自定义格式。也许您想了解Windows上的clipboard formats,主要是@ Tim Williams 提供的article

您需要找到Excel和支持的浏览器都可以理解的格式。

另外answer列出了Excel使用的某些格式。 Clipboard API and events W3C Working Draft强制执行一些强制性数据类型。

在稍微不同的情况下,我将一系列单元格从LibreOffice Calc复制到了Linux计算机上的Firefox。我可以使用xclip获取当前选择的有效数据格式列表:

xclip -selection clipboard -o -t TARGETS

根据@ Tim Williams ”链接,您可以在Windows上使用名为cbdump的工具。看来它不再可用了。 OP发现了一个类似的clipview

它返回大约20种格式,其中一半是OpenOffice(application/x-openoffice-...)独有的。我的浏览器仅支持两个(其余返回一个空字符串):text/plaintext/html

text/plain格式下,浏览器将文本粘贴到您看到的单元格中(1.26,而不是实际值1.2562),这很有意义。在text/html下,它返回非常详细的输出,包括单元格值:

<!-- more html -->
<td height="34" align="right" sdval="1.2562">1.26</td>
<!-- more html -->

使用JavaScript设置剪贴板格式

一旦知道了目标格式,就可以使用ClipboardEvent.clipboardData

  
      
  • 通常通过paste调用从getData(format)事件处理程序中获取要粘贴的数据。
  •   

format是一个DOMString,表示要检索的数据类型。

var textArea = document.querySelector('textarea');

textArea.addEventListener('paste', function(e) {
  var format = document.querySelector('input[name="format"]:checked').value;
  e.preventDefault();
  var excel_data = (e.originalEvent || e).clipboardData.getData(format);
  textArea.value = excel_data;
});
<input id="plainText" type="radio" name="format" value="text/plain" checked>
<label for="plainText">plain text</label>
<input id="HTML" type="radio" name="format" value="text/html">
<label for="html">HTML</label>
<p>Paste excel data here:</p>
<textarea></textarea>