Skip to content
Advertisement

Tuple TypeError when assigning Value to Cell in openpyxl

I’m a first time user of openpyxl and am struggling with basic Cell editing. In the following code I’m trying to change the Cell Value “B3” in my Excel File to a String Value (eg. “Germany”).

What I don’t seem to understand is why the openpyxl Worksheet & Worbook are an immutable tuple type and the Documentation is suggesting the simple Cell Assignment I’m using.

Here’s my Code:

from openpyxl import Workbook
from openpyxl import load_workbook


# 1. Open Excel File
wb = Workbook()
wb = load_workbook(filename="myFile.xlsm", read_only=True, keep_vba=True, data_only=True)
ws = wb.active[1]  # ws is the second Worksheet in the Workbook

# 2. Enter Input (Country)

ws["B3"] = "Germany"

wb.save("myFile.xlsm")

ws[“B3”] = “Germany” TypeError: ‘tuple’ object does not support item assignment

Expectation I expected to find a Excel file that contains my assigned value in the given cell.

I appreciate every answer – thanks!

Advertisement

Answer

Line ws = wb.active[1] is probably wrong. Also you should use read_only=False (simply remove this param, the default is False) if you want to modify the file.

You can assign ws by name. If you don’t know the names you can list them like this:

>>> wb.sheetnames
['Sheet1', 'Sheet2', 'Sheet3']
>>> ws = wb['Sheet2'] # or ws = wb.active - "Get the currently active sheet"
>>> ws["B3"] = "Germany"

Whole code:

from openpyxl import Workbook
from openpyxl import load_workbook


# 1. Open Excel File
wb = Workbook()
wb = load_workbook(filename="myFile.xlsm", keep_vba=True, data_only=True)
ws = wb.active # the currently active sheet

# 2. Enter Input (Country)

ws["B3"] = "Germany"

wb.save("myFile.xlsm")
User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement