<jupyter_start><jupyter_text>Excel is a popular and powerful spreadsheet application for Windows. The openpyxl module allows your Python programs to read and modify Excel spreadsheet files. For example, you might have the boring task of copying certain data from one spreadsheet and pasting it into another one. Or you might have to go through thousands of rows and pick out just a handful of them to make small edits based on some criteria. Or you might have to look through hundreds of spreadsheets of department budgets, searching for any that are in the red. These are exactly the sort of boring, mindless spreadsheet tasks that Python can do for you. Excel es una aplicación de hoja de cálculo popular y potente para Windows. El módulo openpyxl le permite a sus programas de Python leer y modificar archivos de hojas de cálculo de Excel. Por ejemplo, puede que tenga la aburrida tarea de copiar ciertos datos de una hoja de cálculo y pegarla en otra. O tal vez tenga que recorrer miles de filas y seleccionar solo unas pocas para realizar pequeñas ediciones basadas en algunos criterios. O tal vez tenga que consultar cientos de hojas de cálculo de los presupuestos de los departamentos, buscando los que están en rojo. Estas son exactamente las tareas de hoja de cálculo aburridas y sin sentido que Python puede hacer por usted.<jupyter_code>import openpyxl

wb = openpyxl.load_workbook('spreadsheet/example.xlsx')

type(wb)<jupyter_output><empty_output><jupyter_text>You can get a list of all the sheet names in the workbook by calling the .sheetnames method. Enter the following into the interactive shell: Puede obtener una lista de todos los nombres de las hojas en el libro llamando al método .sheetnames. Ingrese lo siguiente en el shell interactivo:<jupyter_code>wb.sheetnames

sheet = wb['Sheet3']
sheet
type(sheet)

sheet.title<jupyter_output><empty_output><jupyter_text>Each sheet is represented by a Worksheet object, which you can obtain by passing the sheet name string to the wb['Sheet3'] workbook method. Finally, you can read the active member variable of a Workbook object to get the workbook’s active sheet. The active sheet is the sheet that’s on top when the workbook is opened in Excel. Once you have the Worksheet object, you can get its name from the title attribute Cada hoja está representada por un objeto Hoja de trabajo, que puede obtener pasando la cadena del nombre de la hoja al método del libro wb['Sheet3']. Finalmente, puede leer la variable de miembro activo de un objeto Libro de trabajo para obtener la hoja activa del libro. La hoja activa es la hoja que está en la parte superior cuando el libro de trabajo se abre en Excel. Una vez que tiene el objeto Hoja de cálculo, puede obtener su nombre del atributo de título<jupyter_code>anotherSheet = wb.active
anotherSheet<jupyter_output><empty_output><jupyter_text>Getting Cells from the Sheets<jupyter_code>sheet = wb['Sheet1']
sheet['A1']

sheet['A1'].value

c = sheet['B1']
c.value
'Row ' + str(c.row) + ', Column ' + c.column + ' is ' + c.value
'Cell ' + c.coordinate + ' is ' + c.value

sheet['C1'].value<jupyter_output><empty_output><jupyter_text>The Cell object has a value attribute that contains, unsurprisingly, the value stored in that cell. Cell objects also have row, column, and coordinate attributes that provide location information for the cell.Here, accessing the value attribute of our Cell object for cell B1 gives us the string 'Apples'. The row attribute gives us the integer 1, the column attribute gives us 'B', and the coordinate attribute gives us 'B1'.OpenPyXL will automatically interpret the dates in column A and return them as datetime values rather than strings. The datetime data type is explained further in Chapter 16.Specifying a column by letter can be tricky to program, especially because after column Z, the columns start by using two letters: AA, AB, AC, and so on. As an alternative, you can also get a cell using the sheet’s cell() method and passing integers for its row and column keyword arguments. The first row or column integer is 1, not 0. Continue the interactive shell example by entering the following: El objeto Cell tiene un atributo de valor que contiene, como era de esperar, el valor almacenado en esa celda. Los objetos de celda también tienen atributos de fila, columna y coordenadas que proporcionan información de ubicación para la celda.Aquí, acceder al atributo de valor de nuestro objeto Cell para la celda B1 nos da la cadena 'Apples'. El atributo de fila nos da el número entero 1, el atributo de columna nos da 'B', y el atributo de coordenadas nos da 'B1'.OpenPyXL interpretará automáticamente las fechas en la columna A y las devolverá como valores de fecha y hora en lugar de cadenas. El tipo de datos de fecha y hora se explica con más detalle en el Capítulo 16.Especificar una columna por carta puede ser difícil de programar, especialmente porque después de la columna Z, las columnas comienzan con dos letras: AA, AB, AC, y así sucesivamente. Como alternativa, también puede obtener una celda utilizando el método cell () de la hoja y pasando enteros para sus argumentos de palabras clave de fila y columna. El primer entero de fila o columna es 1, no 0. Continúe con el ejemplo de shell interactivo ingresando lo siguiente:<jupyter_code>sheet.cell(row=1, column=2)
sheet.cell(row=1, column=2).value
for i in range(1, 8, 2):
    print(i, sheet.cell(row=i, column=2).value)<jupyter_output><empty_output><jupyter_text>As you can see, using the sheet’s cell() method and passing it row=1 and column=2 gets you a Cell object for cell B1, just like specifying sheet['B1'] did. Then, using the cell() method and its keyword arguments, you can write a for loop to print the values of a series of cells.Say you want to go down column B and print the value in every cell with an odd row number. By passing 2 for the range() function’s “step” parameter, you can get cells from every second row (in this case, all the odd-numbered rows). The for loop’s i variable is passed for the row keyword argument to the cell() method, while 2 is always passed for the column keyword argument. Note that the integer 2, not the string 'B', is passed. Como puede ver, usar el método cell () de la hoja y pasarlo row = 1 y column = 2 le proporciona un objeto Cell para la celda B1, igual que lo hizo especificar la hoja ['B1']. Luego, utilizando el método cell () y sus argumentos de palabra clave, puede escribir un ciclo for para imprimir los valores de una serie de celdas.Supongamos que quiere ir a la columna B e imprimir el valor en cada celda con un número de fila impar. Al pasar 2 para el parámetro "paso" de la función range (), puede obtener celdas de cada segunda fila (en este caso, todas las filas impares). La variable i del bucle for se pasa para el argumento de palabra clave de fila al método cell (), mientras que 2 siempre se pasa para el argumento de palabra clave de columna. Tenga en cuenta que se pasa el entero 2, no la cadena 'B'. You can determine the size of the sheet with the Worksheet object’s max_row and max_column member variables. Enter the following into the interactive shell: Puede determinar el tamaño de la hoja con las variables de miembro max_row y max_column del objeto Hoja de cálculo. Ingrese lo siguiente en el shell interactivo:<jupyter_code>sheet = wb['Sheet1']

sheet.max_row

sheet.max_column<jupyter_output><empty_output><jupyter_text>Converting Between Column Letters and NumbersTo convert from letters to numbers, call the openpyxl.cell.column_index_from_string() function. To convert from numbers to letters, call the openpyxl.cell.get_column_letter() function. Enter the following into the interactive shell: Convertir entre letras de columna y númerosPara convertir de letras a números, llame a la función openpyxl.cell.column_index_from_string (). Para convertir de números a letras, llame a la función openpyxl.cell.get_column_letter (). Ingrese lo siguiente en el shell interactivo:<jupyter_code>import openpyxl
from openpyxl.utils import get_column_letter, column_index_from_string
get_column_letter(1)

get_column_letter(2)

get_column_letter(27)

get_column_letter(900)

sheet = wb['Sheet1']
get_column_letter(sheet.max_column)

column_index_from_string('A')

column_index_from_string('AA')<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.04878048780487805, 'fraction_numerical': 0.006367896191277184, 'mean_word_length': 4.971305595408896, 'pattern_counts': {'":': 0, '<': 29, '<?xml version=': 0, '>': 29, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '7', 'dir': 'jupyter-structured-clean-dedup', 'id': '192383', 'license': 'Apache-2.0', 'n_tokens_mistral': 2448, 'n_tokens_neox': 2393, 'n_words': 1253, 'path': '2_Excel_Spreadsheets.ipynb', 'repo_name': 'pgryko/intro_to_python_col', 'size': '8323'}