Bu skill'i kullanıcı Word belgesi (.docx dosyası) oluşturmak, okumak, düzenlemek veya manipüle etmek istediğinde kullanın. İçindekiler tablosu, başlık, sayfa numarası veya mektup başlığı gibi formatlı profesyonel belge talepleri, "Word doc", "word document" veya ".docx" ifadeleri geçtiğinde tetiklenir. .docx dosyalarından içerik çıkarma veya yeniden düzenleme, görsel ekleme veya değiştirme işlemleri için de kullanılır.
cd ~/.claude/skills
git clone https://github.com/anthropics/skills.git skills mkdir -p ~/.claude/skills/docx
curl -fsSL https://raw.githubusercontent.com/anthropics/skills/HEAD/skills/docx/SKILL.md \
-o ~/.claude/skills/docx/SKILL.md Bir .docx dosyası, XML dosyalarını içeren bir ZIP arşividir.
| Görev | Yaklaşım |
|---|---|
| İçeriği oku/analiz et | pandoc veya ham XML için arşivden çıkar |
| Yeni belge oluştur | docx-js kullan - aşağıda Yeni Belge Oluşturma bölümünü gör |
| Mevcut belgeyi düzenle | Arşivden çıkar → XML'i düzenle → yeniden paketle - aşağıda Mevcut Belgeleri Düzenleme bölümünü gör |
Eski .doc dosyaları düzenlenmeden önce dönüştürülmelidir:
python scripts/office/soffice.py --headless --convert-to docx document.doc
# İzlenen değişikliklerle metin çıkarma
pandoc --track-changes=all document.docx -o output.md
# Ham XML erişimi
python scripts/office/unpack.py document.docx unpacked/
python scripts/office/soffice.py --headless --convert-to pdf document.docx
pdftoppm -jpeg -r 150 document.pdf page
Tüm izlenen değişiklikleri kabul eden temiz bir belge üretmek için (LibreOffice gerektirir):
python scripts/accept_changes.py input.docx output.docx
JavaScript ile .docx dosyaları oluştur, ardından doğrula. Kurulum: npm install -g docx
const { Document, Packer, Paragraph, TextRun, Table, TableRow, TableCell, ImageRun,
Header, Footer, AlignmentType, PageOrientation, LevelFormat, ExternalHyperlink,
InternalHyperlink, Bookmark, FootnoteReferenceRun, PositionalTab,
PositionalTabAlignment, PositionalTabRelativeTo, PositionalTabLeader,
TabStopType, TabStopPosition, Column, SectionType,
TableOfContents, HeadingLevel, BorderStyle, WidthType, ShadingType,
VerticalAlign, PageNumber, PageBreak } = require('docx');
const doc = new Document({ sections: [{ children: [/* content */] }] });
Packer.toBuffer(doc).then(buffer => fs.writeFileSync("doc.docx", buffer));
Dosyayı oluşturduktan sonra doğrula. Doğrulama başarısız olursa, arşivden çıkar, XML'i düzenle ve yeniden paketle.
python scripts/office/validate.py doc.docx
// KRİTİK: docx-js varsayılan olarak A4'tür, US Letter değildir
// Tutarlı sonuçlar için sayfa boyutunu her zaman açıkça ayarla
sections: [{
properties: {
page: {
size: {
width: 12240, // 8.5 inç DXA cinsinden
height: 15840 // 11 inç DXA cinsinden
},
margin: { top: 1440, right: 1440, bottom: 1440, left: 1440 } // 1 inçlik kenar boşlukları
}
},
children: [/* content */]
}]
Yaygın sayfa boyutları (DXA birimleri, 1440 DXA = 1 inç):
| Kağıt | Genişlik | Yükseklik | İçerik Genişliği (1" kenar boşluğu) |
|---|---|---|---|
| US Letter | 12,240 | 15,840 | 9,360 |
| A4 (varsayılan) | 11,906 | 16,838 | 9,026 |
Yatay yönelim: docx-js genişlik/yüksekliği dahili olarak değiştirir, bu nedenle portré boyutlarını geçir ve değişimi kendisine yaptır:
size: {
width: 12240, // KISA kenarı genişlik olarak geçir
height: 15840, // UZUN kenarı yükseklik olarak geçir
orientation: PageOrientation.LANDSCAPE // docx-js XML'de değiştirir
},
// İçerik genişliği = 15840 - sol kenar boşluğu - sağ kenar boşluğu (uzun kenarı kullanır)
Varsayılan font olarak Arial kullan (evrensel olarak desteklenir). Okunabilirlik için başlıkları siyah tut.
const doc = new Document({
styles: {
default: { document: { run: { font: "Arial", size: 24 } } }, // 12pt varsayılan
paragraphStyles: [
// ÖNEMLİ: Yerleşik stilleri geçersiz kılmak için tam ID'leri kullan
{ id: "Heading1", name: "Heading 1", basedOn: "Normal", next: "Normal", quickFormat: true,
run: { size: 32, bold: true, font: "Arial" },
paragraph: { spacing: { before: 240, after: 240 }, outlineLevel: 0 } }, // outlineLevel TOC için gerekli
{ id: "Heading2", name: "Heading 2", basedOn: "Normal", next: "Normal", quickFormat: true,
run: { size: 28, bold: true, font: "Arial" },
paragraph: { spacing: { before: 180, after: 180 }, outlineLevel: 1 } },
]
},
sections: [{
children: [
new Paragraph({ heading: HeadingLevel.HEADING_1, children: [new TextRun("Title")] }),
]
}]
});
// ❌ YANLIŞ - hiçbir zaman işaret karakterlerini manuel olarak ekleme
new Paragraph({ children: [new TextRun("• Item")] }) // YANLIŞ
new Paragraph({ children: [new TextRun("\u2022 Item")] }) // YANLIŞ
// ✅ DOĞRU - LevelFormat.BULLET ile numaralandırma config kullan
const doc = new Document({
numbering: {
config: [
{ reference: "bullets",
levels: [{ level: 0, format: LevelFormat.BULLET, text: "•", alignment: AlignmentType.LEFT,
style: { paragraph: { indent: { left: 720, hanging: 360 } } } }] },
{ reference: "numbers",
levels: [{ level: 0, format: LevelFormat.DECIMAL, text: "%1.", alignment: AlignmentType.LEFT,
style: { paragraph: { indent: { left: 720, hanging: 360 } } } }] },
]
},
sections: [{
children: [
new Paragraph({ numbering: { reference: "bullets", level: 0 },
children: [new TextRun("Bullet item")] }),
new Paragraph({ numbering: { reference: "numbers", level: 0 },
children: [new TextRun("Numbered item")] }),
]
}]
});
// ⚠️ Her referans BAĞIMSIZ numaralandırma oluşturur
// Aynı referans = devam eder (1,2,3 sonra 4,5,6)
// Farklı referans = yeniden başlar (1,2,3 sonra 1,2,3)
KRİTİK: Tablolar çift genişlik gerektirir - hem tabloda columnWidths hem de her hücrede width ayarla. Her ikisi olmadan, tablolar bazı platformlarda yanlış render olur.
// KRİTİK: Tutarlı rendering için her zaman tablo genişliğini ayarla
// KRİTİK: Siyah arka planları önlemek için ShadingType.CLEAR (SOLID değil) kullan
const border = { style: BorderStyle.SINGLE, size: 1, color: "CCCCCC" };
const borders = { top: border, bottom: border, left: border, right: border };
new Table({
width: { size: 9360, type: WidthType.DXA }, // Her zaman DXA kullan (yüzdeler Google Docs'ta bozulur)
columnWidths: [4680, 4680], // Tablo genişliğine toplamı olmalı (DXA: 1440 = 1 inç)
rows: [
new TableRow({
children: [
new TableCell({
borders,
width: { size: 4680, type: WidthType.DXA }, // Her hücrede de ayarla
shading: { fill: "D5E8F0", type: ShadingType.CLEAR }, // SOLID değil CLEAR
margins: { top: 80, bottom: 80, left: 120, right: 120 }, // Hücre dolgusu (dahili, genişliğe eklenmez)
children: [new Paragraph({ children: [new TextRun("Cell")] })]
})
]
})
]
})
Tablo genişliği hesaplaması:
Her zaman WidthType.DXA kullan — WidthType.PERCENTAGE Google Docs'ta bozulur.
// Tablo genişliği = columnWidths toplamı = içerik genişliği
// 1" kenar boşluğu olan US Letter: 12240 - 2880 = 9360 DXA
width: { size: 9360, type: WidthType.DXA },
columnWidths: [7000, 2360] // Tablo genişliğine toplamı olmalı
Genişlik kuralları:
WidthType.DXA kullan — hiçbir zaman WidthType.PERCENTAGE (Google Docs ile uyumsuz)columnWidths toplamına eşit olmalıwidth karşılık gelen columnWidth ile eşleşmelimargins dahili dolgudur - içerik alanını azaltır, hücre genişliğine eklenmez// KRİTİK: type parametresi GEREKLI
new Paragraph({
children: [new ImageRun({
type: "png", // Gerekli: png, jpg, jpeg, gif, bmp, svg
data: fs.readFileSync("image.png"),
transformation: { width: 200, height: 150 },
altText: { title: "Title", description: "Desc", name: "Name" } // Üçü de gerekli
})]
})
// KRİTİK: PageBreak bir Paragraph içinde olmalı
new Paragraph({ children: [new PageBreak()] })
// Veya pageBreakBefore kullan
new Paragraph({ pageBreakBefore: true, children: [new TextRun("New page")] })
// Harici bağlantı
new Paragraph({
children: [new ExternalHyperlink({
children: [new TextRun({ text: "Click here", style: "Hyperlink" })],
link: "https://example.com",
})]
})
// Dahili bağlantı (yer işareti + referans)
// 1. Hedefte yer işareti oluştur
new Paragraph({ heading: HeadingLevel.HEADING_1, children: [
new Bookmark({ id: "chapter1", children: [new TextRun("Chapter 1")] }),
]})
// 2. Bağlantı ver
new Paragraph({ children: [new InternalHyperlink({
children: [new TextRun({ text: "See Chapter 1", style: "Hyperlink" })],
anchor: "chapter1",
})]})
const doc = new Document({
footnotes: {
1: { children: [new Paragraph("Source: Annual Report 2024")] },
2: { children: [new Paragraph("See appendix for methodology")] },
},
sections: [{
children: [new Paragraph({
children: [
new TextRun("Revenue grew 15%"),
new FootnoteReferenceRun(1),
new TextRun(" using adjusted metrics"),
new FootnoteReferenceRun(2),
],
})]
}]
});
// Metni aynı satırda sağa hizala (örn. başlığın karşısında tarih)
new Paragraph({
children: [
new TextRun("Company Name"),
new TextRun("\tJanuary 2025"),
],
tabStops: [{ type: TabStopType.RIGHT, position: TabStopPosition.MAX }],
})
// Nokta lideri (örn. TOC stili)
new Paragraph({
children: [
new TextRun("Introduction"),
new TextRun({ children: [
new PositionalTab({
alignment: PositionalTabAlignment.RIGHT,
relativeTo: PositionalTabRelativeTo.MARGIN,
leader: PositionalTabLeader.DOT,
}),
"3",
]}),
],
})
// Eşit genişlik sütunları
sections: [{
properties: {
column: {
count: 2, // sütun sayısı
space: 720, // sütunlar arası boşluk DXA cinsinden (720 = 0.5 inç)
equalWidth: true,
separate: true, // sütunlar arasında dikey çizgi
},
},
children: [/* içerik doğal olarak sütunlar arasında akar */]
}]
// Özel genişlik sütunları (equalWidth false olmalı)
sections: [{
properties: {
column: {
equalWidth: false,
children: [
new Column({ width: 5400, space: 720 }),
new Column({ width: 3240 }),
],
},
},
children: [/* content */]
}]
type: SectionType.NEXT_COLUMN kullanarak yeni bir bölümle sütun sonunu zorla.
// KRİTİK: Başlıklar YALNIZCA HeadingLevel kullanmalı - özel stiller yok
new TableOfContents("Table of Contents", { hyperlink: true, headingStyleRange: "1-3" })
sections: [{
properties: {
page: { margin: { top: 1440, right: 1440, bottom: 1440, left: 1440 } } // 1440 = 1 inç
},
headers: {
default: new Header({ children: [new Paragraph({ children: [new TextRun("Header")] })] })
},
footers: {
default: new Footer({ children: [new Paragraph({
children: [new TextRun("Page "), new TextRun({ children: [PageNumber.CURRENT] })]
})] })
},
children: [/* content */]
}]
width, uzun kenarı height olarak geçir ve orientation: PageOrientation.LANDSCAPE ayarla\n kullanma - ayrı Paragraph öğeleri kullanLevelFormat.BULLET kullantype gerektirir - her zaman png/jpg/vb. belirtwidth DXA ile ayarla - WidthType.PERCENTAGE hiçbir zaman kullanma (Google Docs'ta bozulur)columnWidths dizisi VE hücre width, her ikisi de eşleşmelimargins: { top: 80, bottom: 80, left: 120, right: 120 } kullanShadingType.CLEAR kullan - tablo gölgelemesi için hiçbir zaman SOLIDborder: { bottom: { style: BorderStyle.SINGLE, size: 6, color: "2E75B6", space: 1 } } kullan. İki sütunlu altbilgiler için tabloları değil tab duraklarını kullan (Tab Duraklarını bölümüne bak)outlineLevel ekle - TOC için gerekli (H1 için 0, H2 için 1, vb.)3 adımın tümünü sırasıyla takip et.
python scripts/office/unpack.py document.docx unpacked/
XML'i çıkarır, güzel bastırır, bitişik çalıştırmaları birleştirir ve akıllı tırnak işaretlerini XML varlıklarına dönüştürür (“ vb.) böylece düzenlemeyi hayatta kalırlar. --merge-runs false kullanarak çalıştırma birleştirmesini atla.
unpacked/word/ içindeki dosyaları düzenle. Desenler için aşağıdaki XML Referansını bak.
İzlenen değişiklikler ve yorumlar için "Claude"'u yazar olarak kullan, kullanıcı açıkça farklı bir ad kullanmasını talep etmediği sürece.
Dize değişimi için Edit aracını doğrudan kullan. Python betikleri yazma. Betikler gereksiz karmaşıklık getiri. Edit aracı tam olarak neyin değiştirildiğini gösterir.
KRİTİK: Yeni içerik için akıllı tırnak işaretleri kullan. Apostrof veya tırnak işareti içeren metin eklerken, akıllı tırnak işaretleri üretmek için XML varlıklarını kullan:
<!-- Profesyonel tipografi için bu varlıkları kullan -->
<w:t>Here’s a quote: “Hello”</w:t>
| Varlık | Karakter |
|---|---|
‘ |
' (sol tek) |
’ |
' (sağ tek / apostrof) |
“ |
" (sol çift) |
” |
" (sağ çift) |
Yorum ekleme: Birden çok XML dosyası arasında ortak şeyleri işlemek için comment.py kullan (metin önceden kaçıştırılmış XML olmalı):
python scripts/comment.py unpacked/ 0 "Comment text with & and ’"
python scripts/comment.py unpacked/ 1 "Reply text" --parent 0 # yorum 0'a yanıt
python scripts/comment.py unpacked/ 0 "Text" --author "Custom Author" # özel yazar adı
Ardından document.xml'e işaretçiler ekle (XML Referansında Yorumlar bölümüne bak).
python scripts/office/pack.py unpacked/ output.docx --original document.docx
Otomatik onarımla doğrular, XML'i sıkıştırır ve DOCX oluşturur. Doğrulamayı atlamak için --validate false kullan.
Otomatik onarım şunları düzeltir:
durableId >= 0x7FFFFFFF (geçerli ID'yi yeniden oluşturur)<w:t> üzerinde xml:space="preserve" eksik (boşluk ile)Otomatik onarım şunları düzeltmez:
<w:r> öğelerini değiştir: İzlenen değişiklikleri eklerken, tüm <w:r>...</w:r> bloğunu kardeş olarak <w:del>...<w:ins>... ile değiştir. İzlenen değişim etiketlerini bir çalıştırmanın içine enjekte etme.<w:rPr> biçimlendirmesini koru: Orijinal çalıştırmanın <w:rPr> bloğunu kalın, yazı tipi boyutu vb.'yi korumak için izlenen değişim çalıştırmalarına kopyala.<w:pPr>'de element sırası: <w:pStyle>, <w:numPr>, <w:spacing>, <w:ind>, <w:jc>, <w:rPr> en sonda<w:t> için xml:space="preserve" ekle00AB1234)Ekleme:
<w:ins w:id="1" w:author="Claude" w:date="2025-01-01T00:00:00Z">
<w:r><w:t>inserted text</w:t></w:r>
</w:ins>
Silme:
<w:del w:id="2" w:author="Claude" w:date="2025-01-01T00:00:00Z">
<w:r><w:delText>deleted text</w:delText></w:r>
</w:del>
<w:del> içinde: <w:t> yerine <w:delText> ve <w:instrText> yerine <w:delInstrText> kullan.
Minimal düzenlemeler - yalnızca neyin değiştiğini işaretle:
<!-- "30 gün"ü "60 gün"e değiştir -->
<w:r><w:t>The term is </w:t></w:r>
<w:del w:id="1" w:author="Claude" w:date="...">
<w:r><w:delText>30</w:delText></w:r>
</w:del>
<w:ins w:id="2" w:author="Claude" w:date="...">
<w:r><w:t>60</w:t></w:r>
</w:ins>
<w:r><w:t> days.</w:t></w:r>
Tüm paragrafları/liste öğelerini silme - bir paragraftaki TÜM içeriği kaldırırken, paragraf işaretini de sil, böylece sonraki paragrafla birleşir. <w:pPr><w:rPr> içine <w:del/> ekle:
<w:p>
<w:pPr>
<w:numPr>...</w:numPr> <!-- mevcutsa numaralandırması listele -->
<w:rPr>
<w:del w:id="1" w:author="Claude" w:date="2025-01-01T00:00:00Z"/>
</w:rPr>
</w:pPr>
<w:del w:id="2" w:author="Claude" w:date="2025-01-01T00:00:00Z">
<w:r><w:delText>Entire paragraph content being deleted...</w:delText></w:r>
</w:del>
</w:p>
<w:pPr><w:rPr> içinde <w:del/> olmadan, değişiklikleri kabul etmek boş bir paragraf/liste öğesi bırakır.
Başka bir yazarın eklemesini reddet - silmeyi eklemenin içine yerleştir:
<w:ins w:author="Jane" w:id="5">
<w:del w:author="Claude" w:id="10">
<w:r><w:delText>their inserted text</w:delText></w:r>
</w:del>
</w:ins>
Başka bir yazarın silinmesini geri yükle - silmenin sonuna ekleme ekle (onların silinmesini değiştirme):
<w:del w:author="Jane" w:id="5">
<w:r><w:delText>deleted text</w:delText></w:r>
</w:del>
<w:ins w:author="Claude" w:id="10">
<w:r><w:t>deleted text</w:t></w:r>
</w:ins>
comment.py çalıştırdıktan sonra (Adım 2'ye bak), document.xml'e işaretçiler ekle. Yanıtlar için --parent bayrağı kullan ve işaretçileri üst öğenin içine yerleştir.
KRİTİK: <w:commentRangeStart> ve <w:commentRangeEnd> <w:r>'nin kardeşi, hiçbir zaman içinde değil.
<!-- Yorum işaretçileri w:p'nin doğrudan çocukları, hiçbir zaman w:r içinde değil -->
<w:commentRangeStart w:id="0"/>
<w:del w:id="1" w:author="Claude" w:date="2025-01-01T00:00:00Z">
<w:r><w:delText>deleted</w:delText></w:r>
</w:del>
<w:r><w:t> more text</w:t></w:r>
<w:commentRangeEnd w:id="0"/>
<w:r><w:rPr><w:rStyle w:val="CommentReference"/></w:rPr><w:commentReference w:id="0"/></w:r>
<!-- Yanıt 1 iç içe olan yorum 0 -->
<w:commentRangeStart w:id="0"/>
<w:commentRangeStart w:id="1"/>
<w:r><w:t>text</w:t></w:r>
<w:commentRangeEnd w:id="1"/>
<w:commentRangeEnd w:id="0"/>
<w:r><w:rPr><w:rStyle w:
.png ve .pdf dosyalarında tasarım felsefesini kullanarak güzel görseller oluşturun. Poster, sanat eseri, tasarım veya diğer statik içerikler için bu özelliği kullanabilirsiniz. Telif hakkı ihlallerinden kaçınmak için her zaman orijinal tasarımlar yaratın, mevcut sanatçıların çalışmalarını kopya etmeyin.
Kullanıcıları belgelendirme konusunda işbirlikçi yazım için yapılandırılmış bir workflow içinde rehber etmek için kullanılır. Kullanıcı belgelendirme, teknik özellikler, karar dokümanları veya benzer yapılandırılmış içerik yazma istediğinde harekete geçer. Bu workflow, bağlamı verimli bir şekilde aktarmaya, içeriği yinelemelerle geliştirmeye ve dokümanın okuyucular için işe yaradığını doğrulamaya yardımcı olur.
Kullanıcı PDF dosyaları ile herhangi bir işlem yapmak istediğinde bu skill'i kullanın. Buna PDF'lerden metin/tablo okuma ve çıkarma, birden fazla PDF'yi birleştirme, PDF'leri bölme, sayfaları döndürme, filigran ekleme, yeni PDF oluşturma, PDF formlarını doldurma, PDF şifreleme/şifre açma, görüntü çıkarma ve taranmış PDF'lerde OCR uygulaması dahildir. Kullanıcı bir .pdf dosyasından bahsettiğinde veya
Bu skill'i .pptx dosyalarıyla çalışmanız gereken her durumda kullanın — giriş, çıkış veya her ikisi için de. Sunum oluşturma, slayt destesi hazırlama, metnini okuma ve çıkarma, düzenleme veya güncelleme, dosyaları birleştirme ve bölme gibi tüm işlemleri kapsar.
Artifaktları tema ile stilize etmek için toolkit. Slaytlar, dokümanlar, raporlar, HTML landing page'ler gibi çeşitli artifaktlara uygulanabilir. 10 hazır tema ile renkler ve fontları seçebilir ya da anında yeni tema oluşturabilirsiniz.
Bu skill'i spreadsheet dosyası ana input veya output olduğu her durumda kullanın. Buna şu görevler dahildir: mevcut .xlsx, .xlsm, .csv veya .tsv dosyalarını açma, okuma, düzenleme veya düzeltme (sütun ekleme, formül hesaplama, biçimlendirme, grafik oluşturma, veri temizleme gibi); sıfırdan veya diğer veri kaynaklarından yeni spreadsheet oluşturma; ya da tabular dosya formatları arasında dönüştürme işlemleri.