从Excel复制粘贴列时出现错误

0 投票
3 回答
761 浏览
提问于 2025-04-17 23:58

我想写一个函数来处理一些我从Excel里拿来的数据。这些数据基本上是在Excel的一列里(交易ID)。为了方便起见,我想用raw_input把这列数据复制粘贴进来,存储起来,然后在这个数据上运行我的函数。

但是,不管我怎么做,我总是遇到错误(我实际上在导入数据的这个第一步就卡住了),我很确定问题出在每个项目都在新的一行上(当我用Excel的转置功能把列变成行时,就没有错误了)。

举个例子,如果我想试着设置一个样本字符串,比如:

some_string = "014300071432Gre
014300054037Col
014300065692ASC"

(这是从Excel列粘贴过来的格式),然后我把它叫做some_string,我会得到:

  File "<stdin>", line 1
    al = "014300071432Gre
                        ^
SyntaxError: EOL while scanning string literal

我尝试用.split()来去掉换行符,但没成功。

我还试过在几个讨论中看到的三重引号,但也没有用。这让我更加困惑,因为我以为三重引号是用来让Python不去计算某些东西的。

我在这里放了一些谷歌文档里的示例数据

非常感谢任何帮助。谢谢!

3 个回答

0
some_string = """014300071432Gre
014300054037Col
014300065692ASC"""

三重引号是用来表示多行字符串的,
你可以这样写:

some_string = "014300071432Gre\n014300054037Col\n014300065692ASC"
0

当然可以!请看下面的内容:

在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后在程序中使用这些数据。这个过程就像是从冰箱里拿食材,然后用这些食材做饭。

有些时候,我们会遇到一些问题,比如数据格式不对,或者数据缺失。这就像是你打开冰箱,发现缺少了某种食材,导致你不能做出想要的菜。

为了避免这些问题,程序员通常会写一些代码来检查数据的完整性和正确性。这就像是在做饭之前,先检查一下冰箱里的食材是否齐全。

如果数据有问题,程序会给出错误提示,告诉你哪里出了问题。这样你就可以及时修正,就像是你发现缺少了盐,就去超市买盐回来。

总之,处理数据就像做饭一样,需要仔细检查,确保一切都准备好,这样才能做出美味的菜肴。

some_string = '''014300071432Gre
014300054037Col
014300065692ASC'''
1

你说得对,使用 raw_input 来处理从 Excel 复制的列数据时,确实会遇到换行符的问题。因为 raw_input 这个函数是专门用来读取一行的内容的。根据官方文档的说明:

raw_input([prompt])
如果有 prompt 参数,它会被输出到标准输出中,但不会换行。这个函数会从输入中读取一行,转换成字符串(去掉末尾的换行符),然后返回这个字符串。

换行符的定义就是标志一行的结束。所以,实际上没有简单的方法可以把 Excel 的一列数据直接粘贴到 raw_input 中。


在大多数情况下,从 Python 读取 Excel 数据的最佳方法是直接读取 Excel 文件。最好的工具包是xlrd。假设你的工作簿叫 myData.xls,你想从第一个工作表读取 A2:A5 的数据,你可以这样做:

import xlrd

wb = xlrd.open_workbook('myData.xls')
ws = wb.sheet_by_index(0)
result = ws.col_values(0, 1, 5)

到那时,result 将会是一个包含四个单元格值的列表(A2、A3、A4 和 A5)。


如果你真的希望用户界面能够“在 Excel 中复制一系列单元格,然后粘贴到我的应用程序中”,那么你可能需要考虑构建一个有多行文本输入框的图形用户界面(GUI)。在这方面你有很多选择,从 Python 自带的Tkinter,到第三方库,甚至是非 Python 的 GUI(只要它们能读取输入并将其传递给你的 Python 程序)。


补充:你可以直接读取剪贴板(这样就根本不需要粘贴这一步)。可以查看这些 问题以获取更多信息。从这些问题中得到的最简单的解决方案是使用 Tkinter:

from Tkinter import Tk

r = Tk()
result = r.selection_get(selection='CLIPBOARD')
r.destroy()

上述代码假设剪贴板已经有内容。换句话说,整个流程大致是这样的:

  1. 你的程序提示用户在 Excel 中复制一个选定区域
  2. 用户在 Excel 中复制选定区域
  3. 用户回应你的程序的提示(告诉你的程序剪贴板已经准备好了)
  4. 你的程序运行上述代码,将剪贴板的内容抓取到 result
  5. 你的程序根据需要处理 result

当然,还有更复杂的方法,但这些应该足够让你开始了。

撰写回答