使用 Python 查找 Excel 单元格值 0

Using Python to find an Excel cell value 0

如果 A 列的单元格值为“优秀...”,我正在尝试在 Microsoft Excel 的 B 列中查找单元格值。代码错误,找不到单元格值

wb = Workbook()
xlfile = "ATVI.xlsx"
wb = load_workbook(xlfile)
 
for xws in wb.sheetnames:
    worksheet = wb[xws]
    for row in worksheet.iter_rows("A")
    for cell in row:
        #cell value you want
        if cell.value == "Shares outstanding 5":
            #change column number for any cell value you
            print(ws.cell(row=cell.row, column=2).value)

代码确实可以更改 excel 文件数据 - 下面的示例示例,但是当我在原始数据中搜索特定单元格值时失败,该单元格值在每个 [=24= 的不同行中].在继续学习本课程的过程中,我一直在寻求帮助。

谢谢,

B.

from bs4 import BeautifulSoup
from openpyxl import Workbook
from openpyxl import load_workbook
from openpyxl.styles import Color, PatternFill, Font, Border
from openpyxl.styles import colors
from openpyxl.cell import Cell
import colorama
from colorama import Fore, Style
import os
from keyboard import press
import re
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import shutil
import math
import pandas
from decimal import Decimal
from openpyxl.styles import Alignment
 
 
 
 
 
xlfile = "ATVI.xlsx"
if os.path.exists(xlfile):
    os.remove(xlfile)
 
src_file ="uk_yahoo_finance_for_stock_ATVI.xlsx"
dst_file = "ATVI.xlsx"
 
shutil.copy(src_file, dst_file)
 
wb = Workbook()
xlfile = "ATVI.xlsx"
wb = load_workbook(xlfile)
 
 
#print('B3 to B5')
wb = Workbook()
wb = load_workbook(xlfile)
 
#########################################
#########################################
 
def round_up(n, decimals=0):
    multiplier = 10 ** decimals
    return math.ceil(n * multiplier) / multiplier
 
def truncate(n, decimals=3):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
 
def percentage(a, b):
    return round(a / b * 100, 2)
 
d = {
    'K': 3,
    'M': 6,
    'B': 9
    }
 
def text_to_num(text):
    if text[-1] in d:
        num, magnitude = text[:-1], text[-1]
        return Decimal(num) * 10 ** d[magnitude]
    else:
        return Decimal(text)
 
def percent2fraction(x):
    return float(x.strip('%'))/100
 
 
##########################################
#########################
 
del wb['Sheet']
wb.save(xlfile)
 
##########################################
 
blueFill = PatternFill(start_color="0D57A2", end_color="0D57A2", fill_type = "solid")
whiteFont = Font(color=colors.WHITE)
 
##########################################
"""
 
for xws in wb.sheetnames:
    sheet = wb[xws]
    sheet.delete_rows(74, 1)
    sheet.delete_rows(72, 1)
    sheet.delete_rows(70, 1)
    sheet.delete_rows(30, 1)
    sheet.delete_rows(28, 1)
    sheet.delete_rows(4, 1)
    sheet.delete_rows(2, 1)
wb.save(xlfile)
 
"""
##########################################
 
 
for xws in wb.sheetnames:
    sheet = wb[xws]
    sheet.merge_cells('A1:F1')
    sheet['A1'].fill = blueFill
    sheet['A1'].font = whiteFont
    sheet['A1'].alignment = Alignment(horizontal='center')
    sheet.delete_rows(2,1)
    sheet.delete_rows(3,1)
    sheet['A2'] = "Period End"
    sheet['A2'].fill = blueFill
    sheet['A2'].font = whiteFont
    sheet['B2'].fill = blueFill
    sheet['B2'].font = whiteFont
    sheet['C2'].fill = blueFill
    sheet['C2'].font = whiteFont
    sheet['D2'].fill = blueFill
    sheet['D2'].font = whiteFont
    sheet['E2'].fill = blueFill
    sheet['E2'].font = whiteFont
    sheet['F2'].fill = blueFill
    sheet['F2'].font = whiteFont
wb.save(xlfile)
 
for xws in wb.sheetnames:
    sheet = wb[xws]
    sheet.merge_cells('A6:F6')
    sheet['A6'].fill = blueFill
    sheet['A6'].font = whiteFont
    sheet['A16'].fill = blueFill
    sheet['A16'].font = whiteFont
    sheet['B16'].fill = blueFill
    sheet['B16'].font = whiteFont
    sheet['C16'].fill = blueFill
    sheet['C16'].font = whiteFont
    sheet['D16'].fill = blueFill
    sheet['D16'].font = whiteFont
    sheet['E16'].fill = blueFill
    sheet['E16'].font = whiteFont
    sheet['F16'].fill = blueFill
    sheet['F16'].font = whiteFont
wb.save(xlfile)
 
for xws in wb.sheetnames:
    sheet = wb[xws] 
    sheet.merge_cells('A25:F25')
    sheet['A25'].fill = blueFill
    sheet['A25'].font = whiteFont
    sheet['A25'].alignment = Alignment(horizontal='center')
    sheet.delete_rows(26,1)
    sheet['A26'] = "Period End"
    sheet['A26'].fill = blueFill
    sheet['A26'].font = whiteFont
    sheet['B26'].fill = blueFill
    sheet['B26'].font = whiteFont
    sheet['C26'].fill = blueFill
    sheet['C26'].font = whiteFont
    sheet['D26'].fill = blueFill
    sheet['D26'].font = whiteFont
    sheet['E26'].fill = blueFill
    sheet['E26'].font = whiteFont
    sheet['F26'].fill = blueFill
    sheet['F26'].font = whiteFont
    sheet.delete_rows(27,1)
    sheet.merge_cells('A27:F27')
    sheet['A27'].fill = blueFill
    sheet['A27'].font = whiteFont
    sheet['A27'].alignment = Alignment(horizontal='center')
    sheet.merge_cells('A47:F47')
    sheet['A47'].fill = blueFill
    sheet['A47'].font = whiteFont
    sheet['A47'].alignment = Alignment(horizontal='center')
    sheet.merge_cells('A59:F59')
    sheet['A59'].fill = blueFill
    sheet['A59'].font = whiteFont
    sheet['A59'].alignment = Alignment(horizontal='center')
    sheet.merge_cells('A67:F67')
    sheet['A67'].fill = blueFill
    sheet['A67'].font = whiteFont
    sheet['A67'].alignment = Alignment(horizontal='center')
    sheet.delete_rows(68,1)
    sheet['A68'] = "Period End"
    sheet['A68'].fill = blueFill
    sheet['A68'].font = whiteFont
    sheet['B68'].fill = blueFill
    sheet['B68'].font = whiteFont
    sheet['C68'].fill = blueFill
    sheet['C68'].font = whiteFont
    sheet['D68'].fill = blueFill
    sheet['D68'].font = whiteFont
    sheet['E68'].fill = blueFill
    sheet['E68'].font = whiteFont
    sheet['F68'].fill = blueFill
    sheet['F68'].font = whiteFont
wb.save(xlfile)
 
 
for xws in wb.sheetnames:
    sheet = wb[xws] 
    sheet.merge_cells('A70:F70')
    sheet['A70'].fill = blueFill
    sheet['A70'].font = whiteFont
    sheet['A70'].alignment = Alignment(horizontal='center')
    sheet.merge_cells('A82:F82')
    sheet['A82'].fill = blueFill
    sheet['A82'].font = whiteFont
    sheet['A82'].alignment = Alignment(horizontal='center')
wb.save(xlfile)
 
 
for xws in wb.sheetnames:
    sheet = wb[xws] 
    sheet.merge_cells('A89:F89')
    sheet['A89'].fill = blueFill
    sheet['A89'].font = whiteFont
    sheet['A89'].alignment = Alignment(horizontal='center')
    sheet.merge_cells('A98:F98')
    sheet['A98'].fill = blueFill
    sheet['A98'].font = whiteFont
    sheet['A98'].alignment = Alignment(horizontal='center')
wb.save(xlfile)
 
 
 
##########################################
 
for xws in wb.sheetnames:
    worksheet = wb[xws]
    #print(worksheet)
    tuple(worksheet['B138':'B138'])
    for rowOfCellObjects in worksheet['B138':'B138']:
        for cellObj in rowOfCellObjects:
            v1 = worksheet['B138'].value
            v2 = text_to_num(v1)
            v3 = truncate(v2, 0)
            cellObj.value = v3
            if cellObj.value > 0:
                cellObj.number_format = '[<999950] 0.0,"K";[<999950000]0.0,,"M";0.0,,,"B"'
            elif cellObj.value == 0:
                cellObj.number_format = '[<999950] 0.0,"K";[<999950000]0.0,,"M";0.0,,,"B"'
            else:
                cellObj.number_format = '[>-999950]0.0,"K";[>-999950000]0.0,,"M";0.0,,,"B"'
            cellObj.fill = PatternFill(fgColor='DFECF7', fill_type = 'solid')
            wb.save(xlfile)
            v1 = None
            v2 = None
            v3 = None
            v4 = None
##########################################
 
dash = "-"
for xws in wb.sheetnames:
    worksheet = wb[xws]
    tuple(worksheet['B3':'F96'])
    for rowOfCellObjects in worksheet['B3':'F96']:
        for cellObj in rowOfCellObjects:
            cellValue = cellObj.value
            if cellValue == dash:
                cellObj.value = 0
        #print('--- END OF ROW CHANGE---')
wb.save(xlfile)
 
##########################################
 
################################
print('B3 to F5')
for xws in wb.sheetnames:
    worksheet = wb[xws]
    dash = "-"
    tuple(worksheet['B3':'F5'])
    for rowOfCellObjects in worksheet['B3':'F5']:
        for cellObj in rowOfCellObjects:
            cellValue = cellObj.value
            if cellValue != dash:
                if cellValue != 0:
                    if cellValue != None:
                        x = str(cellValue)
                        y = str(x) + ",000"
                        cellObj.value = y
                        cellObj.value = cellObj.value.replace(',', '')
                        cellObj.value = int(cellObj.value)
                        wb.save(xlfile)
                        if dash not in cellValue:
                            cellObj.number_format = '[<999950] 0.0,"K";[<999950000]0.0,,"M";0.0,,,"B"'
                        else:
                            cellObj.number_format = '[>-999950]0.0,"K";[>-999950000]0.0,,"M";0.0,,,"B"'
                        #
                        cellObj.value = int(float(cellObj.value))
                        #press('enter')
                    #print('--- END OF ROW CHANGE---')
wb.save(xlfile)
################################
 
######################
print('B7 to F15')
for xws in wb.sheetnames:
    worksheet = wb[xws]
    dash = "-"
    tuple(worksheet['B7':'F15'])
    for rowOfCellObjects in worksheet['B7':'F15']:
        for cellObj in rowOfCellObjects:
            cellValue = cellObj.value
            if cellValue != dash:
                if cellValue != 0:
                    if cellValue != None:
                        x = str(cellValue)
                        y = str(x) + ",000"
                        cellObj.value = y
                        cellObj.value = cellObj.value.replace(',', '')
                        wb.save(xlfile)
                        if dash not in cellValue:
                            cellObj.number_format = '[<999950] 0.0,"K";[<999950000]0.0,,"M";0.0,,,"B"'
                        else:
                            cellObj.number_format = '[>-999950]0.0,"K";[>-999950000]0.0,,"M";0.0,,,"B"'
                        #
                        cellObj.value = int(float(cellObj.value))
                        #press('enter')
                    #print('--- END OF ROW CHANGE---')
wb.save(xlfile)

回答 ->

for xws in wb.sheetnames:
    worksheet = wb[xws]
    #for row in worksheet.iter_rows("A"):
    #for row in worksheet.iter_cols("A"):
    for row in worksheet:
        for cell in row:
            #cell value you want
            if cell.value == "Shares outstanding 5":
                #change column number for any cell value you
                #x = int(worksheet.cell(row=cell.row, column=2).value)
                #print(worksheet.cell(row=cell.row, column=2).value)
                x = (worksheet.cell(row=cell.row, column=2).value)
                print(x)