簡體   English   中英

將用戶輸入的數據從Excel工作表傳輸到Python腳本

[英]Transferring user entered data from an Excel worksheet to a Python Script

我正在編寫腳本,並且希望能夠與MS Excel進行交互。 運行腳本后,我想打開一個excel工作表,讓用戶輸入一些數據,在excel中進行一些基本計算,然后將計算出的數據和一些用戶輸入的數據返回到腳本中。

我之所以這樣做,是因為我想允許用戶立即輸入所有數據,而不必在提示后回答提示,並且因為我是Python的新手,甚至不能編寫GUI。

這是我要執行的操作的一個示例:

表1(Excel工作表中的range1):

用戶輸入分數和xa:aa數據,然后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工作表中的range2)

用戶輸入所有數據,所有內容返回腳本以進行進一步計算:

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

將數據輸入excel並將其傳輸到腳本后,即可完成腳本。

我該怎么做呢? Excel似乎是設置表條目數據的最簡單方法,但是如果還有其他方法,請告訴我。 如果是Excel,我該怎么做?

您有很多選擇。

也許您應該以這種方式研究VBA,以便可以在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文件的帶修飾符的字符串,帶有某種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>

JsFiddle

因此,您可以給html元素id賦值,然后可以從javascript中訪問它們。

您也可以在單獨的.js文件中使用javascript。

然后,您只需要在script標簽內引用它即可。

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

這是使用熊貓的一種潛在方法。 如果輸入文件不存在,它將寫入一個虛擬文件(對此進行修改以適合),然后打開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
################

看看xlwings ,這是我編寫的庫,可以完全滿足您的需求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM