Quantcast
Channel: Active questions tagged excel - Stack Overflow
Viewing all articles
Browse latest Browse all 88066

Is this possible? 1st .py file imports 2nd .py file which generates .xlsx file via Openpyxl. Possible to write to .xlsx file from 1st .py file?

$
0
0

I have two python files.

  1. spreadsheet_master.py
  2. spreadsheet_default.py

The _master.py imports the _default.py. The _default.py generates a .xlsx file that has empty cell data but is a formatted default spreadsheet ready for a printer. This all works without errors.

Is it possible to write cell (data) values from the _master.py file which would effectively be written to the .xlsx through the _default.py file?

Thanks, Phil

spreadsheet_master.py code:

    #! python3
'''
Purpose of this file:
Build your excel file on a copy of this file, which imports my default spreadsheet file, spreadsheet_default.py
'''
# Directly importing a module works once. For repetitive importing, use importlib.reload(fileName)
print('\n  spreadsheet_master.py launched')
import sys
for path in sys.path:
    print('path = ', path)
import importlib
importlib.import_module('spreadsheet_default') # No .py needed, causes 'ModuleNotFoundError'
print('\n  spreadsheet_master.py complete')

spreadsheet_default.py code:

#! python3
print('\n  spreadsheet_default.py started')
'''
Purpose of this file:
# Create Spreadsheet
# Create Sheets
# Enter Cell Values
# Set Font & Cell Color
# Merge Cells
# Add Print Options
# Column and Row Dimensions
# Add Borders
'''
# Create Spreadsheet
print('\n  Create Spreadsheet')
import os
import openpyxl
from openpyxl.styles import Alignment, Border, Side, NamedStyle, Font, PatternFill, Protection, GradientFill, Color, colors
# Set directory
# os.chdir('D:') # Todo: Change directory
print('Current Working Directory = %s' % os.getcwd())
# create workbook
wb = openpyxl.Workbook()
print('type(wb) =', type(wb))

# Create Sheets
print('\n  Create Sheets')
print('sheetnames = ', wb.sheetnames)
# wb.active = 0 # sheet index number
sheet01 = wb.active
sheet01.title = 'sheet01'
sheet02 = wb.create_sheet(title='sheet02', index=1)
sheet03 = wb.create_sheet(title='sheet03', index=2)
print('sheetnames =',  wb.sheetnames) # 
wb.save('_spreadsheet_template.xlsx')


# Cell Values (Note: Both ways enter values into cells)
print('\n  Cell Values')
sheet01['A1'] = ''
sheet01['B1'].value = ''
sheet01['C1'] = ''
sheet01['D1'].value = ''
sheet01['E1'] = ''
sheet01['F1'].value = ''
sheet01['G1'] = ''
sheet01['H1'].value = ''
sheet01['I1'] = ''
sheet01['J1'].value = ''
sheet01['A2'] = 'merged A2:A5'

# Set Font & Cell Color
print('\n  Set Font & Cell Color')
headerFont = Font(name='Calibri', size=12, bold=True, underline='single', italic=False)
for row_cells in sheet01.iter_rows(min_row=1, max_row=1):
    for cell in row_cells:
        cell.font = headerFont
        cell.fill = PatternFill(fgColor='A9A9A9', fill_type = 'solid')
        cell.alignment = Alignment(horizontal='center', vertical='center', wrapText=True)

# Merge Cells
print('\n  Merge Cells')
sheet01.merge_cells('A2:A5')
# sheet.unmerge_cells('A1:A5')

# Freeze Panes # See notes at end
print('\n  Freeze Panes')
sheet01.freeze_panes = 'A2'

# Print Options
print('\n  Print Options')
sheet01.print_area = 'A1:J40' # Set print_area
sheet01.print_options.horizontalCentered = True
sheet01.print_options.verticalCentered = True
# Page margins
sheet01.page_margins.left = 0.25
sheet01.page_margins.right = 0.25
sheet01.page_margins.top = 0.75
sheet01.page_margins.bottom = 0.75
sheet01.page_margins.header = 0.3
sheet01.page_margins.footer = 0.3
# Headers & Footers
sheet01.oddHeader.center.text = "&[File]"
sheet01.oddHeader.center.size = 20
sheet01.oddHeader.center.font = "Tahoma, Bold"
sheet01.oddHeader.center.color = "000000" # 
sheet01.oddFooter.left.text = "&[Tab]"
sheet01.oddFooter.left.size = 12
sheet01.oddFooter.left.font = "Tahoma, Bold"
sheet01.oddFooter.left.color = "000000" # 
sheet01.oddFooter.right.text = "&[Path]&[File]"
sheet01.oddFooter.right.size = 6
sheet01.oddFooter.right.font = "Tahoma, Bold"
sheet01.oddFooter.right.color = "000000"

# Column and Row Dimensions
rows = range(2, 20, 1)
cols = range(1, 10, 1)
for row in rows:
    for col in cols:
        sheet01.row_dimensions[row].height = 15.00
        # DELETE: sheet01.row_dimensions[row].width = 200.00
        sheet01.column_dimensions['A'].width = 22.00
        # ERROR: sheet01.column_dimensions[cols].width = 30.00
sheet01.row_dimensions[1].height = 40.00 # header row

# Cell Borders
print('\n  Cell Borders')
borderThick = Border(left=Side(style='thick'), 
                    right=Side(style='thick'), 
                    top=Side(style='thick'), 
                    bottom=Side(style='thick')) #
borderThin = Border(left=Side(style='thin'),
                    right=Side(style='thin'),
                    top=Side(style='thin'),
                    bottom=Side(style='thin')) # 
borderTop = Border(top=Side(style='thick'),
                    left=Side(style='thin'),
                    right=Side(style='thin'), 
                    bottom=Side(style='thin'))
borderBottom = Border(bottom=Side(style='thick'),
                    left=Side(style='thin'),
                    right=Side(style='thin'),
                    top=Side(style='thin'))
borderLeft = Border(left=Side(style='thick'),
                    right=Side(style='thin'),
                    top=Side(style='thin'),
                    bottom=Side(style='thin')) # 
borderRight = Border(right=Side(style='thick'),
                    left=Side(style='thin'),
                    top=Side(style='thin'),
                    bottom=Side(style='thin')) # 
borderTopLeft = Border(left=Side(style='thick'),
                    right=Side(style='thin'),
                    top=Side(style='thick'),
                    bottom=Side(style='thin')) #
borderTopRight = Border(left=Side(style='thin'),
                    right=Side(style='thick'),
                    top=Side(style='thick'),
                    bottom=Side(style='thin')) #
borderBottomLeft = Border(left=Side(style='thick'),
                    right=Side(style='thin'),
                    top=Side(style='thin'),
                    bottom=Side(style='thick')) #
borderBottomRight = Border(left=Side(style='thin'),
                    right=Side(style='thick'),
                    top=Side(style='thin'),
                    bottom=Side(style='thick')) #
# Set thin borders on entire sheet
rows = range(1, 41)
rowTop = int(1)
rowBot = int(40)
colLeft = int(1)
colRight = int(10)
columns = range(1, 11)
for row in rows:
    for col in columns:
        sheet01.cell(row, col).border = borderThin
# Set thick outer borders
for row in rows:
    for col in columns:
        sheet01.cell(rowTop, col).border = borderTop
        sheet01.cell(rowBot, col).border = borderBottom
        sheet01.cell(row, colLeft).border = borderLeft
        sheet01.cell(row, colRight).border = borderRight
        sheet01['A1'].border = borderTopLeft
        sheet01['J1'].border = borderTopRight
        sheet01['A40'].border = borderBottomLeft
        sheet01['J40'].border = borderBottomRight

wb.save('_spreadsheet_template.xlsx')
print('\n  spreadsheet_default.py complete\n')

Viewing all articles
Browse latest Browse all 88066

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>