2017-08-09 57 views
-2

我是相當新的Python和我試圖做到以下幾點:如何閱讀和編輯Excel的Excel文件

我有一個Excel數據表兩欄。第一個包含名稱,第二個包含數據。如果我有一個程序名稱,它需要在電子表格中找到該名稱,將一個單元格移到右側(下一列)讀取該值。之後,我有一個小公式可以改變這個值,然後我想將這些數據存儲在它所來自的同一個單元格中。

之後,它重新開始。

現在我知道我需要使用xlsxwriter來完成這項工作,但是我無法提供正確的代碼。我發現這個網頁: https://www.datacamp.com/community/tutorials/python-excel-tutorial#gs.WWHel8Q 但它不是我正在尋找。我不是在要求你們給我一個代碼,但是你能幫助我走出正確的方向嗎? (事實上​​,我寧願自己編寫代碼,因爲這是一種學習Python的好方法)。

在此先感謝!

編輯:

import pandas as pd 

df = pd.read_excel('Test.xlsx') 
writer = pd.ExcelWriter('Test.xlsx') 
df = pd.DataFrame(
    {"Name" :['A' ,'B', 'C', 'D', 'E', 'F'], 
    "Value" :[1 ,2 ,3 ,4 ,5 ,6]}, 
    ) 
df.to_excel(writer,'Main_sheet') 
value = df.loc[lambda df: df.Name == 'D',:] 
p = value.Value + 50 
print(value) 
print(p) 
df.set_value(value.index, 'Name', 10) 

writer.save() 

現在我得到這個。但它不起作用,D的價值保持不變。爲什麼?

+1

嗨,歡迎來到Stack Overflow。我很感激你注意到你並沒有試圖要求某人爲你編碼。但是,您的問題仍然不符合[問]中的社區準則。堆棧溢出更多用於幫助解決特定的編碼問題。一個更有效的和被接受的方法是自己去嘗試這個問題,然後如果有任何你不明白的特定部分,或者你無法解決的錯誤,那就問問他們。這有助於你瞭解自己可以做什麼,並且通過挑戰我們提出比「看看這裏」更有創意的答案。 –

+0

對不起,我希望有人能帶領我走向正確的方向。就像安德烈對他的熊貓答案一樣,這真的有幫助btw –

回答

0

我想你應該嘗試熊貓。您將能夠讀取整個表格並對其進行操作。學習如何使用熊貓並不難,但它非常有用。

http://pandas.pydata.org/

您將能夠做這樣的事情:

df = pd.read_excel('filename') 
df.loc[df.col1 == 'name', col2] = formula 

起初你讀取文件。然後在第一列找到一個值,並在第二列的這一行中修改該值。

UPD

這裏是你的情況的解決方案。正如我所說的,您可以直接修改數據框中的值。代碼在「名稱」列中找到具有「D」的行,並將「值」列中的值加上50。

df = pd.DataFrame(
    {"Name" :['A' ,'B', 'C', 'D', 'E', 'F'], 
    "Value" :[1 ,2 ,3 ,4 ,5 ,6]}, 
    ) 

df.loc[df.Name == 'D', 'Value'] += 50 

df 
Name Value 
0 A 1 
1 B 2 
2 C 3 
3 D 54 
4 E 5 
5 F 6 

df.to_excel('Test.xlsx') 
+0

嗯,我不能得到它的工作。我試過你的線路,但是col1有錯誤。所以我嘗試了其他的東西(請參閱編輯過的帖子),這仍然不起作用哈哈。有時候這很令人沮喪。 –

+0

我用解決方案更新了我的答案。 –

0

它發生,我寫了使用一個功能earlies openpyxl

import openpyxl 
import os 


def load_FromExcel(filepath, total_row = 999999999999): 
    """Using module "openpyxl" to load data from excel file(only support '.xlsx' format) 

    Make sure you already install "openpyxl". 
    :param filepath: 
     Source file should be put under the path beneath the file which is calling this method. 
     Otherwise you'll have to change some code inside. 
    :return: 
     list_row is a list consists of list records. 
     For example, list_row[0] is a list consists of these cell in 1st row. 
     Therefore, use list_row[0][0] represent the value in 1st column in 1st row(A1). 
    """ 
    filename = os.path.join(os.path.dirname(__file__) + "/../" + filepath) 
    # Use "os.path.dirname(__file__)" to get a relevant path 
    print(filename) 
    # Open a workbook by name= filename in READ-ONLY mode 
    wb = openpyxl.load_workbook(filename, read_only=True) 
    # Select this worksheet 
    sheet = wb.get_active_sheet() 
    sheet_rows = tuple(sheet.rows) 
    # This is the total amount of rows in the excel file opened 
    row_count = len(sheet_rows) 
    print(row_count) 
    row_count = 0 
    list_row = [] 
    for row in sheet.rows: 
     row_count += 1 
     temp_list = [] 
     for cell in row: 
      # print(cell.value,end=',') 
      temp_list.append(cell.value) 
     list_row.append(temp_list) 
     if row_count > total_row: 
      break 
    print("Loading Complete") 
    return list_row 

,並請不要讓自己保持清潔,您在使用之前的代碼編碼要什麼。