我正在编写此脚本以搜索Excel工作表中的数字,然后复制与该数字相关联的整行,然后将其粘贴到新的Excel工作表中。我想要一行一行地复制相同的数据,并且我执行程序并保存它。我试图通过在这个社区中搜索类似的问题通过多种方式找出解决方案,但它不起作用。以下是代码。
import xlsxwriter
import xlrd
import xlwt
import math
def open_file(path):
wb = xlrd.open_workbook(path)
sheet = wb.sheet_by_index(0)
for row_num in range(sheet.nrows):
row_value = sheet.row_values(row_num)
if row_value[2] == 68860:
row = 0
col = 0
wbk = xlsxwriter.Workbook('or.xlsx')
ws = wbk.add_worksheet()
ws.write('A1', row_value[0])
ws.write('B1', row_value[1])
ws.write('C1', row_value[2])
row = row + 1
wbk.close()
if __name__ == "__main__":
path = "ord.xlsx"
open_file(path)
任何建议,我都会非常感激。
编辑版:我解决了我所面临的问题。现在,即使.csv文件已经打开,我也无法找到防止断开串口连接的解决方案。以下是主要背景的解释。
实际上,最初的想法是通过扫描包含该特定数字的QR码来搜索该数字,然后如果找到该数字则将信息写入新文件。我通过将其写入.csv文件而不是Xlsx文件来解决此问题。现在一切正常,除了一个我无法破解它的问题。我通过串口连接了扫描仪。会有很多用户随时打开并访问此.csv文件。当程序运行并且文件关闭时,扫描部分正常工作。但是当文件打开并且有人扫描任何qr代码时,肯定会出现.csv文件打开的错误,以及整个程序爆发,我们必须一次又一次地运行它。是否有可能阻止程序爆发并且即使文件打开也只是继续?以下是我的代码。
if(ser.isOpen()):
ser.flushInput()
ser.flushOutput()
while(1):
y = ser.readline().decode("ASCII")
if (str(y)!=''):
if (str(y)!='\r'):
if (str(y)!='\n'):
print(y)
for row_num in range(sheet.nrows):
row_value = sheet.row_values(row_num)
if int(y) == int(row_value[0]):
if re.match("(11\d+)", row_value[0]) is not None:
file = open('Function.csv', 'a')
file.write(str(row_value[0])+";"+str(row_value[1])+"\n")
file.close()
ser.close()
答案 0 :(得分:1)
你的代码中有一个但是。每次你找到那个值(并且它们可能是带有该值的多行,对吗?),你将写入新的表格。
如果你在循环之前打开目标工作簿,并且跟踪你应该在旁边写的哪一行,你将把所有这些值都记录到单页。
像这个使用字符串插值的片段:
def open_file(path):
row_in_output = 1
wbk = xlsxwriter.Workbook('or.xlsx')
ws = wbk.add_worksheet()
[...]
ws.write("A{row_in_output}", row_value[0])
ws.write("B{row_in_output}", row_value[1])
ws.write("C{row_in_output}", row_value[2])
row = row + 1
row_in_output = row_in_output + 1
wbk.close()
PS我正在使用Python 3.6插值语法。如果您使用较旧的Python,请相应地进行调整。