将用户input的数据从Excel工作表传输到Python脚本

我正在写一个脚本,我希望能够与MS Excel交互。 一旦我运行脚本,我想打开一个Excel工作表,让用户input一些数据,在Excel中做一些基本的计算,然后返回计算的数据和一些用户input的数据到脚本。

我这样做是因为我希望允许用户一次input所有的数据,而不必在提示后回答提示,也是因为我是Python新手,甚至没有能够编写GUI。

以下是我想要做的一个例子:

表1(Excel工作表中的范围1):

用户input分数和XA:一个数据和Excel计算混合。 将xa:aa上的混合信息返回到我的python脚本,用于我的脚本中进一步计算。 数据input表实际上是更长的(更多行数据input),但只是显示足够的一个子集来感受我正在尝试做什么:

Stream 1 2 3 4 5 Blend Fraction 10% 60% 20% 10 100% xa 100 150 175 57 135.0 yg 30.7 22 18 12.2 25.6 aa 210 425 375 307 352.2 

表2(在同一个Excel工作表中的范围2)

用户input所有数据,所有内容都将返回到脚本以供进一步计算:

  Min Max Incr temp 45 60 5 press 7.2 7.8 0.2 cf 1 5 1 

一旦数据input到Excel并转移到脚本,我完成脚本。

我怎么去做这个? Excel似乎是设置表格数据的最简单方法,但如果有其他方法,请告诉我。 如果是Excel,我该怎么做呢?

这是一个使用pandas的可能方法。 如果input文件不存在,它会写入一个虚拟文件(对其进行修改),然后打开excel文件,并在用户closures后读回dataframe。 将excel_pathreplace为Excel安装path(我在这里使用LibreOffice)。

 import os import subprocess import pandas as pd input_file = 'input.xlsx' excel_path = 'soffice' ############# # setup stuff ############# if not os.path.isfile(input_file): input_template = pd.DataFrame(columns=['1','2','3','4']) # any additional code to set up space for user to input values input_template.to_excel(input_file) else: # call excel and open the input file subprocess.call([excel_path, input_file]) # read modified input into DataFrame excel_input = pd.read_excel(input_file) ################ # body of script ################ 

你有很多select。

也许你应该看看VBA的方式,你可以在Excel文档中创build你的脚本。

你也可以开始学习Tkinter,所以你马上用python做界面。

我个人会用HTML来做。 这样你可以很容易地创build一个接口与input,并让JavaScript做计算。

但是回到Python和EXCEL。

您可以将文档另存为以csv分号分隔。

 import os with open('yourcsv.csv','r') as f: contents = f.read().splitlines() values = [] for row in range(0,len(contents),1): values += contents[row].split(';') 

现在你把你的桌子列在一个多维列表中。 做一些计算。

现在你需要把结果附加为一个; 使用某种for循环将csv文件的string定界

 file = open('yourcsv.csv','a') file.write(results) file.close() 

如果你想尝试使用HTML和JavaScript,它会看起来像这样。

 <!DOCTYPE html> <html> <head> <title>Optional</title> <meta charset='UTF-8'> <script> function calc(){ var val1 = parseFloat(document.getElementById('value1').value); var val2 = parseFloat(document.getElementById('value2').value); var res = val1+val2; var resDiv = document.getElementById('result'); resDiv.innerHTML = parseFloat(res,2); } </script> </head> <body> <input type='text' id='value1'> <input type='text' id='value2'> <br> <button onClick='calc()'>Calculate</Button> <br> <div id='result'></div> </body> </html> 

的jsfiddle

所以你给的HTML元素ID的,那么你可以acsess他们从JavaScript。

您也可以在单独的.js文件中使用JavaScript。

那么你只需要在脚本标签内引用它。

 <script src='yourScript.js'></script> 

看看xlwings ,我写的一个图书馆是为了做你想要的。