跳到主要内容
知仓学习社ZHICANG

xlsx

Read, inspect, edit, or create Microsoft Excel `.xlsx` workbooks, including structured data extraction, formula-aware cell edits, and workbook gener…

不碰外部(只输出文字)无严重或高危命中TokenRhythm/opensquilla

它会碰到什么

扫了多少6 个文本文件,18 KB
它会碰到什么不碰外部(只输出文字)
命中总数0 处
命中统计严重 0 · 高 0 · 中 0 · 低 0

这一栏是扫描器报的事实,不是结论。命中多不等于有毒(安全工具、规则库、示例脚本本来就会包含危险写法),命中少也不等于干净。它和你手上的凭据、文件、网络有什么关系,需要你自己看。

技能内容

xlsx

Work with .xlsx workbooks. The format is OOXML SpreadsheetML — a zip

container of XML parts. Treat each cell as a typed value: a number, a string,

a datetime, or a formula. Mixing the four causes Excel to flag the workbook

or compute incorrect totals.

Decide the path first

| You have | Goal | Path |

|---|---|---|

| Existing .xlsx | Read sheets and cells | A. Inspect |

| Existing .xlsx | Modify specific cells | B. Edit-in-place |

| Nothing or a brief | Build a new workbook | C. Create from scratch |

If the user provides a workbook to update, default to path B and treat the

input as the formatting baseline. Choose path C only when the user says

"start fresh".


Path A: Inspect

python {baseDir}/scripts/inspect_xlsx.py /path/to/book.xlsx

Output:

{
  "sheets": [
    {
      "name": "Q3",
      "max_row": 10,
      "max_col": 5,
      "rows": [
        [
          {"value": "Metric", "type": "s"},
          {"value": "Value", "type": "s"}
        ],
        [
          {"value": "Revenue", "type": "s"},
          {"value": 2100000, "type": "n"}
        ]
      ]
    }
  ]
}

type follows openpyxl conventions: n (number), s (string), d

(datetime), f (formula), b (bool), e (error), inlineStr (inline

string). The helper script reads with data_only=False so formula expressions

are returned literally; pass --data-only to get the cached computed result

instead.


Path B: Edit in place

python {baseDir}/scripts/edit_xlsx.py book.xlsx ops.json --out edited.xlsx

ops.json:

[
  {"op": "set_cell", "sheet": "Q3", "row": 2, "col": 2, "value": "=SUM(B3:B10)"},
  {"op": "set_cell", "sheet": "Q3", "row": 5, "col": 1, "value": "Net margin"},
  {"op": "rename_sheet", "old": "Sheet1", "new": "Summary"}
]

Rules:

  • Rows and columns are 1-based (Excel convention).
  • Strings starting with = are written as formulas (cell.value = "=..."),

matching openpyxl behavior. To write a literal =hello use '=hello

(Excel's leading-apostrophe escape) or pass an explicit as_text: true.

  • Datetimes go in as ISO 8601 strings ("2026-05-06T09:00:00"); the helper

parses them back to datetime objects so Excel renders the cell with date

format.

  • Editing a cell does not recalculate dependent formulas. Excel and

LibreOffice recalculate on open. If you need cached values immediately,

use a calculation engine (out of scope here).


Path C: Create from scratch

python {baseDir}/scripts/create_xlsx.py spec.json --out out.xlsx

Spec:

{
  "sheets": [
    {
      "name": "Sales",
      "rows": [
        ["Region", "Revenue", "Growth"],
        ["NA", 1200000, "=B2/SUM($B$2:$B$4)"],
        ["EU", 850000, "=B3/SUM($B$2:$B$4)"]
      ],
      "merged": [{"range": "A1:C1"}],
      "freeze": "A2"
    }
  ]
}

For programmatic use:

from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws.title = "Sales"
ws.append(["Region", "Revenue"])
ws.append(["NA", 1_200_000])
ws["C2"] = "=B2*1.05"          # formula
ws.merge_cells("A1:B1")
ws.freeze_panes = "A2"
wb.save("out.xlsx")

See [references/openpyxl.md](references/openpyxl.md) for styles, conditional

formatting, charts, and formula references.


Common pitfalls

| Symptom | Cause | Fix |

|---|---|---|

| Cell shows =SUM(...) as text, not the result | Wrote the string with as_text: true or workbook lacks cached values | Open in Excel and save once; or use a calc engine |

| Date renders as a serial number (45000) | Wrote int instead of datetime | Pass an ISO string and let the helper parse; or set cell.number_format |

| Merged range loses borders | Borders apply to the top-left cell only after merge | Apply border to the top-left cell post-merge |

| Workbook breaks Excel after edit | Removed a defined name without updating dependent formulas | Audit defined_names before delete |

| Pivot tables disappear | openpyxl drops pivot caches on save | Edit pivots in Excel; programmatic edit is not supported |


Boundaries

  • This skill handles .xlsx (OOXML SpreadsheetML). It does not handle

.xls (legacy binary), .xlsm (macro-enabled), or Google Sheets. Convert

via Excel or LibreOffice export first.

  • Pivot tables, slicers, and pivot caches are read-only here.
  • For datasets larger than ~100k rows or 50MB workbooks, prefer pandas +

to_excel with the xlsxwriter engine; openpyxl loads the whole workbook

into memory.

想直接用这个技能?

本站把开放许可(MIT / Apache 等)的技能按仓库打包整理到网盘,点一下转存到你自己的网盘,不用一个个从 GitHub 拉。许可未声明的技能只给原始仓库链接,不打包。

它属于哪个仓库

星标★ 7,018
本站分层T1
该仓技能数68
原文件路径src/opensquilla/skills/bundled/xlsx/SKILL.md

同一个仓库里的其他技能

看这个仓库的全部 68 个技能