Trabajar con hojas de Excel en Python

Excel es un popular y poderoso programa de hoja de cálculo para Windows. El módulo openpyxl permite que los programas de Python lean y modifiquen archivos de hojas de cálculo de Excel. Por ejemplo, es posible que tenga una tarea aburrida en la que necesite copiar algunos datos de una tabla y pegarlos en otra. O tal vez necesite elegir algunas filas entre miles y modificarlas ligeramente según una determinada condición. O necesita mirar cientos de hojas de cálculo de presupuestos departamentales para encontrar déficits. Todas estas tareas aburridas se pueden hacer en Python.

documento excel

Un archivo de hoja de cálculo de Excel se denomina libro de trabajo. Un libro de trabajo se guarda en un archivo con la extensión .xlsx. Cada libro de trabajo puede contener varias hojas (también llamadas hojas de trabajo). La hoja que el usuario está viendo actualmente (o la hoja que vio por última vez antes de cerrar Excel) se denomina hoja activa. Cada tabla tiene columnas (las direcciones son letras que comienzan con A) y filas (las direcciones son números que comienzan con 1). Los desplazamientos en filas y columnas específicas se denominan celdas. Cada celda contiene un número o valor de texto. La cuadrícula y los datos formados por las celdas forman la tabla.

Instale el módulo openpyxl

Python no viene con openpyxl, por lo que debe instalarlo usted mismo. Abrir entrada de línea de comando

pip install openpyxl

instalar.

Leer documentos de Excel

Usaremos una hoja de cálculo llamada ejemplo.xlsx, que se puede encontrar y descargar en Automatizar las cosas aburridas con Python . Como se muestra en la figura a continuación, hay 3 hojas predeterminadas denominadas Hoja1, Hoja2 y Hoja3, que Excel proporciona automáticamente para los nuevos libros de trabajo (diferentes sistemas operativos y programas de hojas de cálculo pueden proporcionar diferentes hojas predeterminadas).

Abra un documento de Excel con el módulo openpyxl

Después de importar el módulo openpyxl, puede usar openpyxl.load_workbook()funciones para abrir documentos de Excel.

openpyxl.load_workbook()La función acepta un nombre de archivo y devuelve un valor del tipo de datos del libro de trabajo. El objeto del libro de trabajo representa todo el archivo de Excel (example.xlsx), similar al objeto File que representa un archivo de texto abierto.

obtener la hoja de trabajo del libro de trabajo

Se puede obtener una lista de todos los nombres de las hojas del libro de trabajo a través de la propiedad sheetnames del objeto del libro de trabajo.

Cada hoja está representada por un objeto Hoja de trabajo, que se puede obtener indexando el libro de trabajo (usando la cadena de nombre de la hoja). La hoja activa del libro de trabajo se puede obtener a través de la propiedad activa del objeto Libro de trabajo. Después de obtener el objeto Hoja de trabajo, puede obtener su nombre a través del atributo de título.

obtener celda de la tabla

Después de obtener el objeto Hoja de trabajo, puede acceder al objeto Celda por su nombre.

El objeto Celda tiene una propiedad de valor que contiene el valor almacenado en esta celda. El objeto Celda también tiene propiedades de fila, columna y coordenadas que brindan información sobre la ubicación de la celda.

Como se muestra arriba, acceda a la propiedad value del objeto Cell de la celda B1 para obtener la cadena 'Apples'. El atributo de fila da el número entero 1, el atributo de columna da 2 y el atributo de coordenadas da 'B1'.

Al llamar a un cell()método de tabla, puede pasar un número entero como argumentos de palabra clave de fila y columna, o puede obtener una celda.

El tamaño de la tabla se puede determinar mediante las propiedades max_column y max_row del objeto Worksheet.

sheet.max_column, sheet.max_row
# (3, 7)

Convertir entre letras de columna y números

Para convertir de letras a números, llame a la openpyxl.utils.column_index_from_stringfunción. Para convertir de números a letras, llame a la openpyxl.utils.get_column_letter()función.

Después de importar estas dos funciones desde el módulo openpyxl.utils, puede llamarlas get_column_letter(), pasando un número entero como 27, para averiguar cuál es la letra en la columna 27. La función column_index_stringhace lo contrario: pasa el nombre de la letra de una columna y devuelve cuál es el número de esa columna.

Obtener filas y columnas de una tabla

Puede dividir un objeto Hoja de trabajo para obtener todos los objetos Celda en una fila, columna o área rectangular en la hoja de cálculo. A continuación, puede recorrer todas las celdas de este sector.

Esta tupla contiene 3 tuplas: cada tupla representa 1 fila, desde la parte superior hasta la parte inferior del área especificada. Cada una de estas 3 tuplas internas contiene una fila de objetos Cell en el rango especificado, desde la celda más a la izquierda hasta la más a la derecha. Esta porción de la hoja de cálculo contiene todos los objetos Celda desde A1 hasta C3, desde la celda superior izquierda hasta la celda inferior derecha.

Puede obtener una fila o columna en la tabla de la siguiente manera

Escribir en un documento de Excel

openpyxl también proporciona algunos métodos para escribir datos. Esto significa que su programa puede crear y editar archivos de hojas de cálculo. Usando Python, crear una hoja de cálculo con miles de filas de datos es muy simple.

Crear y guardar documentos de Excel

Llame openpyxl.Workbook()a la función para crear un nuevo objeto Libro de trabajo vacío.

Cuando se modifica el objeto Libro de trabajo o sus hojas y celdas, el archivo de hoja de cálculo no se guarda a menos save()que se llame al método del libro de trabajo.

wb.save('demo.xlsx')

Crear y eliminar hojas de trabajo

Usando los métodos create_sheet()y remove_sheet(), puede agregar o eliminar hojas de trabajo en un libro de trabajo.

create_sheet()El método devuelve un nuevo objeto Worksheet, denominado SheetX, que de forma predeterminada es la última hoja de trabajo del libro. Como alternativa, puede utilizar los argumentos de palabra clave de índice y título para especificar el índice o el nombre de la nueva hoja de trabajo.

remove()El método acepta un objeto Hoja de trabajo como su parámetro, no una cadena del nombre de la hoja.

escribir valor en la celda

Escribir un valor en una celda es muy parecido a escribir un valor en una clave de un diccionario.

Mirando el archivo demo.xlsx, puede ver que los valores se han escrito en el archivo

Proyecto: leer datos de una hoja de cálculo

Suponga que tiene una hoja de cálculo con datos del Censo de EE. UU. de 2010. Tiene la tarea bastante aburrida de iterar a través de miles de filas en una tabla, calcular la población total y el número de distritos censales en cada condado (un distrito censal es un área geográfica, definida a los efectos de un censo). Cada fila de la tabla representa un distrito censal. La tabla se llama censupopdata.xlsx y se puede descargar en Automatizar las cosas aburridas con Python .

Solo hay una tabla en la hoja de cálculo censopopdata.xlsx llamada "Población por distrito censal". Cada fila contiene datos para un distrito censal. Las columnas son el número de sector censal (A), la abreviatura del estado (B), el nombre del condado (C) y la población del sector censal (D).

En este proyecto, necesitamos escribir un script que lea datos de una hoja de cálculo del censo y haga lo siguiente:

  • Leer datos de la hoja de Excel
  • Calcular el número de distritos censales en cada condado
  • Calcular la población total de cada condado
  • resultado de impresión

Esto significa que el código debe realizar las siguientes tareas:

  • Abra el documento de Excel con el módulo openpyxl y lea las celdas
  • Calcule todos los datos de población y tramo censal, guárdelos en una estructura de datos
  • Usando el módulo pprint, escriba la estructura de datos en un archivo de texto con una extensión .py

El código completo se ve así:

import openpyxl, pprint

# 用openpyxl模块打开Excel文档
wb = openpyxl.load_workbook('censuspopdata.xlsx')
sheet = wb['Population by Census Tract']
# 存储普查区数目和人口数据
countryData = {}

for row in range(2,sheet.max_row+1):
    state = sheet['B'+str(row)].value
    country = sheet['C'+str(row)].value
    pop = sheet['D'+str(row)].value

    countryData.setdefault(state, {})

    countryData[state].setdefault(country, {'tracts':0, 'pop':0})

    countryData[state][country]['tracts'] += 1
    countryData[state][country]['pop'] += int(pop)

# 将数据存储到文件中
resultFile = open('census2010.py', 'w')
resultFile.write('allData = ' + pprint.pformat(countryData))
resultFile.close()

Los datos guardados en el archivo censo2010.py se ven así:

referencia 

Automatice las cosas aburridas con Python

Si encuentra dificultades al comienzo del aprendizaje y desea encontrar un entorno de comunicación y aprendizaje de Python, puede unirse a nosotros, recibir materiales de aprendizaje y discutir juntos.

 

Supongo que te gusta

Origin blog.csdn.net/weixin_56659172/article/details/123966232
Recomendado
Clasificación