docx-manipulation

安装量: 305
排名: #3015

安装

npx skills add https://github.com/claude-office-skills/skills --skill docx-manipulation

DOCX Manipulation Skill Overview This skill enables programmatic creation, editing, and manipulation of Microsoft Word (.docx) documents using the python-docx library. Create professional documents with proper formatting, styles, tables, and images without manual editing. How to Use Describe what you want to create or modify in a Word document Provide any source content (text, data, images) I'll generate python-docx code and execute it Example prompts: "Create a professional report with title, headings, and a table" "Add a header and footer to this document" "Generate a contract document with placeholders" "Convert this markdown content to a styled Word document" Domain Knowledge python-docx Fundamentals from docx import Document from docx . shared import Inches , Pt , Cm from docx . enum . text import WD_ALIGN_PARAGRAPH from docx . enum . style import WD_STYLE_TYPE

Create new document

doc

Document ( )

Or open existing

doc

Document ( 'existing.docx' ) Document Structure Document ├── sections (margins, orientation, size) ├── paragraphs (text with formatting) ├── tables (rows, cells, merged cells) ├── pictures (inline images) └── styles (predefined formatting) Adding Content Paragraphs & Headings

Add heading (level 0-9)

doc . add_heading ( 'Main Title' , level = 0 ) doc . add_heading ( 'Section Title' , level = 1 )

Add paragraph

para

doc . add_paragraph ( 'Normal text here' )

Add styled paragraph

doc . add_paragraph ( 'Note: Important!' , style = 'Intense Quote' )

Add with inline formatting

para

doc . add_paragraph ( ) para . add_run ( 'Bold text' ) . bold = True para . add_run ( ' and ' ) para . add_run ( 'italic text' ) . italic = True Tables

Create table

table

doc . add_table ( rows = 3 , cols = 3 ) table . style = 'Table Grid'

Add content

table . cell ( 0 , 0 ) . text = 'Header 1' table . rows [ 0 ] . cells [ 1 ] . text = 'Header 2'

Add row dynamically

row

table . add_row ( ) row . cells [ 0 ] . text = 'New data'

Merge cells

a

table . cell ( 0 , 0 ) b = table . cell ( 0 , 2 ) a . merge ( b ) Images

Add image with size

doc . add_picture ( 'image.png' , width = Inches ( 4 ) )

Add to specific paragraph

para

doc . add_paragraph ( ) run = para . add_run ( ) run . add_picture ( 'logo.png' , width = Inches ( 1.5 ) ) Formatting Paragraph Formatting from docx . enum . text import WD_ALIGN_PARAGRAPH from docx . shared import Pt , Inches para = doc . add_paragraph ( 'Formatted text' ) para . alignment = WD_ALIGN_PARAGRAPH . CENTER para . paragraph_format . line_spacing = 1.5 para . paragraph_format . space_after = Pt ( 12 ) para . paragraph_format . first_line_indent = Inches ( 0.5 ) Character Formatting run = para . add_run ( 'Styled text' ) run . bold = True run . italic = True run . underline = True run . font . name = 'Arial' run . font . size = Pt ( 14 ) run . font . color . rgb = RGBColor ( 0x00 , 0x00 , 0xFF )

Blue

Page Setup from docx . enum . section import WD_ORIENT from docx . shared import Inches section = doc . sections [ 0 ] section . page_width = Inches ( 11 ) section . page_height = Inches ( 8.5 ) section . orientation = WD_ORIENT . LANDSCAPE section . left_margin = Inches ( 1 ) section . right_margin = Inches ( 1 ) Headers & Footers section = doc . sections [ 0 ]

Header

header

section . header header . paragraphs [ 0 ] . text = "Company Name" header . paragraphs [ 0 ] . alignment = WD_ALIGN_PARAGRAPH . CENTER

Footer with page numbers

footer

section . footer para = footer . paragraphs [ 0 ] para . text = "Page "

Add page number field

run

para . add_run ( ) fldChar1 = OxmlElement ( 'w:fldChar' ) fldChar1 . set ( qn ( 'w:fldCharType' ) , 'begin' ) run . _r . append ( fldChar1 )

... (field code for page number)

Styles

Use built-in styles

doc . add_paragraph ( 'Heading' , style = 'Heading 1' ) doc . add_paragraph ( 'Quote' , style = 'Quote' ) doc . add_paragraph ( 'List item' , style = 'List Bullet' )

Common styles:

- 'Normal', 'Heading 1-9', 'Title', 'Subtitle'

- 'Quote', 'Intense Quote', 'List Bullet', 'List Number'

- 'Table Grid', 'Light Shading', 'Medium Grid 1'

Best Practices
Structure First
Plan document hierarchy before coding
Use Styles
Consistent formatting via styles, not manual formatting
Save Often
Call
doc.save()
periodically for large documents
Handle Errors
Check file existence before opening
Clean Up
Remove template placeholders after filling Common Patterns Report Template def create_report ( title , sections ) : doc = Document ( ) doc . add_heading ( title , 0 ) doc . add_paragraph ( f'Generated: { datetime . now ( ) } ' ) for section_title , content in sections . items ( ) : doc . add_heading ( section_title , 1 ) doc . add_paragraph ( content ) return doc Table from Data def add_data_table ( doc , headers , rows ) : table = doc . add_table ( rows = 1 , cols = len ( headers ) ) table . style = 'Table Grid'

Headers

for i , header in enumerate ( headers ) : table . rows [ 0 ] . cells [ i ] . text = header table . rows [ 0 ] . cells [ i ] . paragraphs [ 0 ] . runs [ 0 ] . bold = True

Data rows

for row_data in rows : row = table . add_row ( ) for i , value in enumerate ( row_data ) : row . cells [ i ] . text = str ( value ) return table Mail Merge Pattern def fill_template ( template_path , replacements ) : doc = Document ( template_path ) for para in doc . paragraphs : for key , value in replacements . items ( ) : if f'{{ { key } }}' in para . text : para . text = para . text . replace ( f'{{ { key } }}' , value ) return doc Examples Example 1: Create a Business Letter from docx import Document from docx . shared import Inches , Pt from docx . enum . text import WD_ALIGN_PARAGRAPH from datetime import datetime doc = Document ( )

Letterhead

doc . add_paragraph ( 'ACME Corporation' ) doc . add_paragraph ( '123 Business Ave, Suite 100' ) doc . add_paragraph ( 'New York, NY 10001' ) doc . add_paragraph ( )

Date

doc . add_paragraph ( datetime . now ( ) . strftime ( '%B %d, %Y' ) ) doc . add_paragraph ( )

Recipient

doc . add_paragraph ( 'Mr. John Smith' ) doc . add_paragraph ( 'XYZ Company' ) doc . add_paragraph ( '456 Industry Blvd' ) doc . add_paragraph ( 'Chicago, IL 60601' ) doc . add_paragraph ( )

Salutation

doc . add_paragraph ( 'Dear Mr. Smith,' ) doc . add_paragraph ( )

Body

body

"""We are pleased to inform you that your proposal has been accepted... [Letter body continues...] Thank you for your continued partnership.""" for para_text in body . split ( '\n\n' ) : doc . add_paragraph ( para_text ) doc . add_paragraph ( ) doc . add_paragraph ( 'Sincerely,' ) doc . add_paragraph ( ) doc . add_paragraph ( ) doc . add_paragraph ( 'Jane Doe' ) doc . add_paragraph ( 'CEO, ACME Corporation' ) doc . save ( 'business_letter.docx' ) Example 2: Create a Report with Table from docx import Document from docx . shared import Inches doc = Document ( ) doc . add_heading ( 'Q4 Sales Report' , 0 )

Executive Summary

doc . add_heading ( 'Executive Summary' , 1 ) doc . add_paragraph ( 'Q4 2024 showed strong growth across all regions...' )

Sales Table

doc . add_heading ( 'Regional Performance' , 1 ) table = doc . add_table ( rows = 1 , cols = 4 ) table . style = 'Medium Grid 1 Accent 1' headers = [ 'Region' , 'Q3 Sales' , 'Q4 Sales' , 'Growth' ] for i , header in enumerate ( headers ) : table . rows [ 0 ] . cells [ i ] . text = header data = [ [ 'North America' , '$1.2M' , '$1.5M' , '+25%' ] , [ 'Europe' , '$800K' , '$950K' , '+18%' ] , [ 'Asia Pacific' , '$600K' , '$750K' , '+25%' ] , ] for row_data in data : row = table . add_row ( ) for i , value in enumerate ( row_data ) : row . cells [ i ] . text = value doc . save ( 'sales_report.docx' ) Limitations Cannot execute macros or VBA code Complex templates may lose some formatting Limited support for advanced features (SmartArt, Charts) No direct PDF conversion (use separate tool) Track changes reading is limited Installation pip install python-docx Resources python-docx Documentation GitHub Repository Office Open XML Spec

返回排行榜