# VBA2LOBasic

A cross-platform Python tool for VBA macro migration assessment and LibreOffice Basic conversion support.

It extracts VBA from Microsoft Office files, analyzes macro patterns, and generates LibreOffice Basic migration candidates with reports. This helps teams estimate the cost and risk of moving Office automation away from Microsoft Office before committing to a full migration.

---

## 🎯 これは何？（30秒で）

- **誰のため**：Microsoft Office ライセンスコスト削減を検討中の自治体・教育機関・中小企業 IT 担当
- **何が解決される**：自社の VBA マクロ資産が LibreOffice Basic へどれくらい移行可能かを **「抽出 → 解析 → 移行候補生成 → 互換性レポート」** の自動パイプラインで可視化。脱 Microsoft Office の意思決定材料を提供
- **なぜ既存ツールではダメか**：LibreOffice 公式の変換ツールは存在せず、手作業移行が現実。本ツールは **クロスプラットフォーム Python で自動化**し、移行可否判定とレポートを出力
- **使う条件**：Python 3.10+ / Windows・macOS・Linux

## 💰 想定ユースケース・価格帯

| 用途 | 形態 |
|---|---|
| OSS としての利用（自社内 PoC） | 無料（MIT） |
| 自治体・教育機関の **マクロ資産棚卸し・移行レポート受託** | 応相談 |
| 業界特化（会計・経理向け）の追加変換ルール開発 | 個別見積もり |

---

## Business Use Cases

- Microsoft Office to LibreOffice / OpenOffice migration pre-assessment
- VBA macro inventory, extraction, and compatibility review
- Conversion reports for manual remediation planning
- Public-sector, education, and cost-reduction projects that need offline desktop compatibility

## Features

- **Cross-Platform**: Works fully on Windows, macOS, and Linux.
- **Dual Interface**: Includes a comprehensive Command Line Interface (CLI) and a user-friendly Graphical User Interface (GUI).
- **Direct Extraction**: Extract and parse VBA code directly from macro-enabled Office files (`.xlsm`, `.docm`, `.pptm`) without needing Microsoft Office installed.
- **Smart Conversion Support**: Generates LibreOffice Basic migration candidates from VBA source files (`.bas`, `.cls`, `.frm`), adapting functions and objects where possible.
- **Reporting & Dry-Run**: View detailed conversion reports showing warnings and errors, with JSON output support and a "dry-run" tool to preview changes before converting.

## Installation

1. Make sure you have Python 3.10 or higher.
2. Clone the repository and install the application:
   ```bash
   pip install .
   ```
   For development capabilities (e.g. tests, linting):
   ```bash
   pip install .[dev]
   ```

## Usage

### GUI Mode
Launch the graphical interface directly:
```bash
vba2lobasic-gui
```
*(Alternatively, you can run `vba2lobasic gui`)*

### CLI Mode

The main `vba2lobasic` CLI comes with multiple commands built-in.

#### ★ まず動きを見たい人へ（即実行デモ）
入力ファイル不要で、同梱サンプル VBA を LibreOffice Basic に即変換して表示します：
```bash
vba2lobasic demo
# -o output.bas を付ければファイルにも保存できます
```

#### 1. Convert macros
Convert individual files or entire directories, automatically detecting the source application context:
```bash
vba2lobasic convert path/to/macro.xlsm -o output_directory/
```
*Key Options:*
- `--source-app [excel|word|powerpoint|auto]`: specify the source context instead of relying on auto-detection.
- `--recursive`: Process directories recursively.
- `--report` / `--report-json`: Generate summary or detailed JSON conversion reports.

#### 2. Extract VBA code
Extract raw VBA files (.bas, .cls, .frm) from a macro-enabled Office document without running the conversion step:
```bash
vba2lobasic extract path/to/document.docm -o output_directory/
```

#### 3. Dry-Run (Report)
Simulate the conversion and display what would be changed, without writing any output:
```bash
vba2lobasic report path/to/file.bas
```

## Development & Tests

The project uses `pytest` for testing. To run the suite:
```bash
pytest
```

---

## 🤝 商用利用・カスタマイズ依頼

- 個人・社内利用は無料（MIT ライセンス）
- 法人・自治体・SI 向け導入支援、カスタマイズ、診断レポート受託は応相談
- 連絡先：highdefinitionaudiodriver@gmail.com

<!-- CODEX-CURRENT-STATUS:START -->
## 現状サマリ (2026-05-25)

- 対象: VBA2LOBasic
- 作業ブランチ: main
- README更新時点の参照コミット: 320baca chore: scripts/.gitignore - __pycache__ を除外
- Python プロジェクト。pyproject.toml を起点に依存関係とツール設定を管理。
- docs ディレクトリ配下に設計・運用・補足資料を配置。
- tests ディレクトリ配下にテストを配置。
- src ディレクトリ配下に主要実装を配置。
- 主要な確認コマンド: python -m pytest または README 記載の Python コマンド
- 次に進めるなら、README 内の利用手順と既存 docs / tests を起点に、未整備の検証手順・引き継ぎメモ・CI 化を補強する。
<!-- CODEX-CURRENT-STATUS:END -->

