Skip to content

Commit 1c4f501

Browse files
k-ibarakiclaude
andcommitted
refactor: Address AI review feedback
Code improvements: - Remove unused frozen_cols parameter from _expand_range_with_headers - Add include_header to log messages for better debugging - Unify default value (True) between public API and internal methods Documentation improvements: - Add metadata_only to parameter tables (usage.md, usage_ja.md) - Add comprehensive usage example for metadata_only mode - Show recommended workflow: inspect structure first, then fetch data Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
1 parent 13fed91 commit 1c4f501

3 files changed

Lines changed: 90 additions & 5 deletions

File tree

docs/usage.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@ The `sharepoint_excel` tool allows you to read and search Excel files in SharePo
188188
| `cell_range` | str \| None | None | Cell range (e.g., "A1:D10") |
189189
| `include_formatting` | bool | False | Include formatting information |
190190
| `include_header` | bool | True | Auto-detect and separate header rows using `freeze_panes` |
191+
| `metadata_only` | bool | False | Return only file and worksheet metadata without cell contents |
191192

192193
### Basic Workflow
193194

@@ -310,6 +311,48 @@ result = sharepoint_excel(
310311
- Set `include_header=False` to return legacy `rows` format
311312
```
312313
314+
#### 7. Metadata-Only Mode (File Structure Inspection)
315+
```python
316+
# Get only file structure without data rows
317+
result = sharepoint_excel(
318+
file_path="/sites/finance/Shared Documents/large-report.xlsx",
319+
metadata_only=True
320+
)
321+
```
322+
323+
**Metadata-Only Response:**
324+
```json
325+
{
326+
"file_path": "/sites/finance/Shared Documents/large-report.xlsx",
327+
"sheets": [{
328+
"name": "Sheet1",
329+
"freeze_panes": "B2",
330+
"frozen_rows": 1,
331+
"frozen_cols": 1,
332+
"dimensions": "A1:E1000",
333+
"header_rows": [
334+
[
335+
{"value": "Product", "coordinate": "A1"},
336+
{"value": "Price", "coordinate": "B1"},
337+
{"value": "Stock", "coordinate": "C1"}
338+
]
339+
],
340+
"data_rows": []
341+
}]
342+
}
343+
```
344+
345+
**Use Cases:**
346+
- Inspect large file structure before fetching data
347+
- Understand what headers exist in each sheet
348+
- Determine the necessary `cell_range` before retrieving full data
349+
- Reduce token usage
350+
351+
**Recommended Workflow:**
352+
1. Use `metadata_only=True` to inspect file structure
353+
2. Identify the required range
354+
3. Fetch actual data with specific `cell_range`
355+
313356
### JSON Output Format
314357

315358
#### Read Mode (Default)

docs/usage_ja.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@ SHAREPOINT_SITE_NAME=@onedrive,sales-team,customer-portal
188188
| `cell_range` | str \| None | None | セル範囲(例: "A1:D10") |
189189
| `include_formatting` | bool | False | 書式情報を含めるか |
190190
| `include_header` | bool | True | ヘッダー行を自動検出して分離するか(`freeze_panes`を使用) |
191+
| `metadata_only` | bool | False | メタデータ(シート名やセル範囲など)のみを返し、セル内容は取得しないかどうか |
191192

192193
### 基本的なワークフロー
193194

@@ -310,6 +311,48 @@ result = sharepoint_excel(
310311
- `include_header=False`を指定すると、従来の`rows`形式で返す
311312
```
312313
314+
#### 7. メタデータのみ取得(ファイル構造の確認)
315+
```python
316+
# データ行を除外してファイル構造のみを取得
317+
result = sharepoint_excel(
318+
file_path="/sites/finance/Shared Documents/large-report.xlsx",
319+
metadata_only=True
320+
)
321+
```
322+
323+
**メタデータのみのレスポンス:**
324+
```json
325+
{
326+
"file_path": "/sites/finance/Shared Documents/large-report.xlsx",
327+
"sheets": [{
328+
"name": "Sheet1",
329+
"freeze_panes": "B2",
330+
"frozen_rows": 1,
331+
"frozen_cols": 1,
332+
"dimensions": "A1:E1000",
333+
"header_rows": [
334+
[
335+
{"value": "商品名", "coordinate": "A1"},
336+
{"value": "価格", "coordinate": "B1"},
337+
{"value": "在庫", "coordinate": "C1"}
338+
]
339+
],
340+
"data_rows": []
341+
}]
342+
}
343+
```
344+
345+
**ユースケース:**
346+
- 大きなファイルの構造を事前に確認
347+
- どのシートにどんなヘッダーがあるかを把握
348+
- 必要な`cell_range`を決定してから本データを取得
349+
- トークン使用量の削減
350+
351+
**推奨ワークフロー:**
352+
1. `metadata_only=True`でファイル構造を確認
353+
2. 必要な範囲を特定
354+
3. `cell_range`を指定して本データを取得
355+
313356
### JSON出力形式
314357

315358
#### 読み取りモード(デフォルト)

src/sharepoint_excel.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ def parse_to_json(
119119
logger.info(
120120
f"Parsing Excel file: {file_path} "
121121
f"(include_formatting={include_formatting}, sheet={sheet_name}, range={cell_range}, "
122-
f"metadata_only={metadata_only})"
122+
f"include_header={include_header}, metadata_only={metadata_only})"
123123
)
124124

125125
try:
@@ -166,7 +166,7 @@ def _parse_sheet(
166166
sheet,
167167
include_formatting: bool,
168168
cell_range: str | None = None,
169-
include_header: bool = False,
169+
include_header: bool = True,
170170
metadata_only: bool = False,
171171
) -> dict[str, Any]:
172172
"""
@@ -216,7 +216,7 @@ def _parse_sheet(
216216
# セル範囲を拡張してヘッダーを含める
217217
if include_header and frozen_rows > 0:
218218
header_range, data_range = self._expand_range_with_headers(
219-
cell_range, frozen_rows, frozen_cols
219+
cell_range, frozen_rows
220220
)
221221

222222
# ヘッダー範囲がある場合は取得
@@ -410,15 +410,14 @@ def _parse_freeze_panes(self, freeze_panes: str | None) -> tuple[int, int]:
410410
return (0, 0)
411411

412412
def _expand_range_with_headers(
413-
self, cell_range: str, frozen_rows: int, frozen_cols: int
413+
self, cell_range: str, frozen_rows: int
414414
) -> tuple[str | None, str]:
415415
"""
416416
cell_rangeを固定範囲を含むように拡張
417417
418418
Args:
419419
cell_range: セル範囲(例: "A5:D10")
420420
frozen_rows: 固定行数
421-
frozen_cols: 固定列数
422421
423422
Returns:
424423
(header_range, data_range)のタプル

0 commit comments

Comments
 (0)