我正在编写脚本,我希望能够与MS Excel进行交互。一旦我运行脚本,我想打开一个excel工作表,让用户输入一些数据,在excel中做一些基本的计算,然后将计算出的数据和一些用户输入的数据返回给脚本。
我之所以这样做,是因为我想让用户一次输入所有数据而不必在提示后回答提示,也因为我是Python的新手甚至不是接近能够编写GUI。
以下是我尝试做的一个例子:
表1(Excel工作表中的range1):
用户输入Fraction和xa:aa data和excel计算混合。关于xa的混合信息:aa返回到我的python脚本,在我的脚本中用于进一步计算。数据输入表实际上更长(更多行数据输入),但只是显示了足够的子集,以便了解我尝试做的事情:
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)
用户输入所有数据,并将所有内容返回到脚本以进行进一步计算:
Min Max Incr
temp 45 60 5
press 7.2 7.8 0.2
cf 1 5 1
将数据输入excel并传输到脚本后,我就完成了脚本。
我该怎么做呢? Excel似乎是设置表项数据的最简单方法,但如果有其他方法,请告诉我。如果是Excel,我该怎么做呢?
答案 0 :(得分:0)
你有很多选择。
也许你应该研究一下你可以在excel文档中创建脚本的方式。
您也可以开始学习Tkinter,因此您可以立即在python中创建界面。
就个人而言,我会用HTML做。这样你就可以轻松创建一个带输入的界面,让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(';')
现在,您将表格放在多维列表中。 做一些计算。
现在你需要将结果附加为; csv文件的delimeted字符串,带有某种for循环
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>
所以你给html元素id,然后你可以从javascript中找到它们。
您还可以在单独的.js文件中使用javascript。
然后你只需要在脚本标签内引用它。
<script src='yourScript.js'></script>
答案 1 :(得分:0)
这是使用熊猫的潜在方法。如果输入文件不存在,则会写入一个虚拟文件(将其修改为适合),然后打开excel文件,并在用户关闭后读回数据帧。将excel_path
替换为Excel安装的路径(我在这里使用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
################
答案 2 :(得分:0)
看一下xlwings,我写的一个库就是你想做的。