Python-将字符串添加到剪贴板,将以正确的格式粘贴到Excel(即,分成行/列)

2020-03-26 excel python-3.x tkinter clipboard openpyxl

我已经看到了这个问题的一些答案,但是在VBA和C#中-在python中什么都没有。 在python 3中,我尝试执行以下操作:

  1. 为变量分配适当的“ excel”格式的值字符串
  2. 然后将此变量复制到剪贴板
  3. 然后,用户应该能够手动CTRL + V(粘贴)此字符串到excel中,并将其分成正确的行/列位置。

我在项目中同时使用了tkinter和openpyxl,并通过测试获得了一些结果,但这不是我想要的。我得到的最接近的是下面。

# If I first go into excel, 
# and copy a few columns within a single row with different data in them, 
# then I run the following code: 

import tkinter as tk
root = tk.Tk()
paste = root.clipboard_get()

print(paste)

# Then I manually copy the print output to the clipboard,
# and then go back to excel and paste, 
# excel gives the following warning message:
# "The data you're pasting isn't the same size as your selection.  do you want to paste anyways?"
# And after pressing OK, it seems as though the data is pasted properly. 

可以,并且print(paste)字符串可以帮助我为要生成的字符串的初始变量创建适当的格式,但是我需要一个不会导致Excel每次弹出此警告标志的解决方案。

如果有人能对此提供一些见识,我将不胜感激。另外,解决方案需要通过python而不是通过对Excel的修改。其次,解决方案不是关于将数据直接附加/写入Excel(通过Openpyxl等),而是以适当的格式将数据获取到剪贴板(我正在使用Excel 2016)。

谢谢!!


编辑:

我还尝试使用kichik用户在此处介绍的“ ctypes解决方案”。

为了使该解决方案更易于使用,我下载了一个名为“ InsideClipboard”的应用程序,该应用程序使我可以轻松地查看剪贴板“复制”数据所用的每种格式的格式ID。

使用kichik的ctype解决方案,我检查了是否手动复制存储在剪贴板中的不同格式的打印输出是否可以让我手动CTRL + V到原始格式的Excel,但这失败了。原始的“副本”是Excel中的单个字符串行中的多列字符串,并且手动将各个格式“粘贴”回excel,将所有字符串都保存在单个单元格中(创建的HTML格式除外)多行数据-也是错误的)。不同的格式包括CF_LOCALE(16),CF_TEXT(1),CF_OEMTEXT(7),CF_UNICODETEXT(13)和HTML格式(49384)。

因此,仍然:没有解决方案。


编辑2:

我意识到我可以在python中创建字符串,而在字符串之间插入实际的制表符,而不是使用\ t,并且它可以创建一个字符串,将其粘贴到Excel中时,将数据放入单个行的不同列中。

另外,我意识到,如果我直接将CTRL + V组合到Excel中(而不是在行标题中),而不是要粘贴数据的实际行,就不再获得Excel“警告消息”。因此,使用此替代方法可能会起作用。如果没有人提供任何输入,那么这种简单的方法可能就足够了。

但是,我希望能够简单地单击行标题而不是第一个相关的行单元格来粘贴数据,而不会出现Excel警告弹出窗口。想法仍然受到欢迎,最好通过python完成所有操作(无需对Excel进行修改,因为该应用程序可以在不同的Windows OS PC上运行)。

因此:可能是简单的解决方案,但并不完美。


编辑3:

因此,我制定了一个基于Edit2的解决方案。如果在工作计算机上将Excel作为应用程序打开,则Excel“警告”弹出窗口仍然会发生;但是,如果可以通过在线处理器打开和编辑Excel文件,则用户可以突出显示行标题并粘贴,而不会生成Excel“警告”弹出窗口。这在我的特定情况下有效,尽管更好的解决方案是使复制的数据在任何情况下都不会生成Excel“警告”弹出窗口。无论如何,如果没有人知道如何仅通过python阻止Excel警告弹出窗口,那么我仍然可以使用此方法。

这是我的解决方案(请注意,长字符串中的空格实际上是“制表符”):

import pyperclip

# t variables are defined prior to the below code
# note: the "   " parts in the data string are actually tabs

data = t1 + "   " + t2 + "  " + "   " + t3 + "  " + t4 + "  " + t5 + "  " + t6 + "  " + t7 + "  "  + "  " + "t8"  + "   "  + "  "  + "  "  + "  "  + "  "  + "  " + t9 + "  " + t10 + " " + t11 + " " + t12 + " "  + "  "  + "  "  + "  "  + "  "  + "  " + t13

pyperclip.copy(data)
print("clipboard:", data)

# now manually pressing CTRL+V while inside Excel (online processor) will
# paste the various t variables in the appropriate cells designated by 
# the "   " tabs in between.  Of note, this works for columns of a single
# row as I didn't need multiple rows of data for my task.

Answers

Related