はじめに
QGISでExcel(xlsx)を読み込むと「ふりがな」まで読み込む問題
この記事を書いている2025年12月時点でのQGISの最新版は3.44ですが、日本語を入力したExcelのxlsxファイルをレイヤに読み込むと、下図のようにふりがな(ルビ)まで読み込まれていしまいます。

xlsxファイルは、QGISで編集することもできるので、非常に便利なのでぜひ使いたいと思いますが、日本語を入力したxlsxファイルはこの問題があって利用することができません。
xlsファイルは?
xlsファイルをQGISで読み込むと、ふりがなは読み込まれません。ただし、CSVと同じで読み取り専用で、QGISから編集することができません。
Excelでふりがなを記録しない方法
Excel(というかMS office)でふりがなを保存しない方法はあります。
オプション>言語で「officeのオーサリング言語と校正機能」で、優先する言語を英語にする方法です。
この設定を行うことで、新しく入力する日本語にはふりがなが記録されません。
ただし、この言語の設定はOfficeのすべてのアプリに影響するので、ワードやパワーポイントにも影響します。著者が確認したところでは、箇条書きに丸付き数字が使えないなど、日本語の時とは少し設定が異なる場合があるようです。
また、この方法ではすでに記録されたふりがなを削除することはできません。
すでに記録されたふりがなを削除する方法
すでに記録されたふりがなを削除するには、一度CSVに保存し、またxlsxファイルに保存し直すとふりがなは削除されます。
しかし、いちいちCSVに保存して戻すというのもめんどくさいです。
Pythonでふりがなを削除する
QGISにふりがな付きのxlsxファイルをレイヤに読み込んで、PythonコンソールからPythonを実行して削除できないか、Geminiを頼ってみます。次のようなコードを考えてくれました。
import os
import shutil
from openpyxl import load_workbook
from qgis.core import QgsProject, QgsVectorLayer
from qgis.utils import iface
from PyQt5.QtWidgets import QMessageBox
# --- 1. 対象レイヤの指定とファイルパスの抽出 ---
# QGISの「レイヤパネル」で現在選択されているレイヤを使用します
layer = iface.activeLayer()
if not layer:
QMessageBox.warning(None, "エラー", "レイヤが選択されていません。対象のExcelレイヤを選択してください。")
else:
source = layer.source()
file_path = source.split("|")[0]
layer_name = layer.name()
if not file_path.lower().endswith(".xlsx"):
QMessageBox.warning(None, "エラー", "このレイヤは Excel(xlsx)ファイルではありません。")
else:
# --- 2. バックアップの作成 ---
dir_name = os.path.dirname(file_path)
base_name = os.path.basename(file_path)
name, ext = os.path.splitext(base_name)
backup_file_path = os.path.join(dir_name, f"{name}_Backup{ext}")
try:
# バックアップを作成
shutil.copy2(file_path, backup_file_path)
print(f"バックアップファイルを作成しました: {backup_file_path}")
# --- 3. Excel ふりがな削除と上書き保存 ---
wb = load_workbook(file_path)
for ws in wb.worksheets:
for row in ws.iter_rows():
for cell in row:
# セルのふりがなプロパティを削除
if hasattr(cell, "phonetic"):
cell.phonetic = None
wb.save(file_path)
print(f"Excelファイルのふりがなを削除し、上書き保存しました: {file_path}")
# --- 4. レイヤの再読み込み ---
project = QgsProject.instance()
layer_id = layer.id()
# 既存レイヤを削除
project.removeMapLayer(layer_id)
# 同じファイルパスで新しいレイヤとして再読み込み
new_layer = QgsVectorLayer(file_path, layer_name, "ogr")
if not new_layer.isValid():
QMessageBox.critical(None, "エラー", "Excel レイヤの再読み込みに失敗しました。")
else:
project.addMapLayer(new_layer)
QMessageBox.information(None, "完了", "ふりがな削除し、レイヤとフィールド名を更新しました。")
except Exception as e:
QMessageBox.critical(None, "エラー", f"処理中にエラーが発生しました:\n{str(e)}")
QGISのPythonコンソールで、「エディタの表示」ボタンをクリックしてエディタを表示して、上記のコードを貼り付けます。ふりがなを削除したいExcelレイヤを選択して、「▶」ボタンで実行できます。
ファイルは上書きされるので、一応バックアップするようにしました。
プラグイン化しました
いちいちPythonコンソールを表示するのも面倒なので、上記のコードをプラグイン化しました。
公式リポジトリには登録していませんが、Githubで公開していますので、インストール用ZIPファイルをダウンロードしてください。
https://github.com/koukita/xlsx_furigana_delete
最後に
QGISでExcelファイルをレイヤに使えると、リレーションなどでデータ管理にも活用することができます。
また、xlsxファイルは、QGISからも編集できるので便利です。
ふりがなが保存されたExcelファイルを使用する場合は、このプラグインを活用していただければと思います。
しかし、QGISのデフォルトでふりがなを読み込まないようになれば、一番いいと思います。
QGISならエアロトヨタ株式会社
エアロトヨタ株式会社では、QGIS基礎研修、QGIS応用研修など幅広い学習プログラムを用意しています。防災、森林、都市計画など専門分野に特化した研修も準備しています。
実際に業務に使っているデータを使って、QGISを学習することが可能です!
また、QGISを利用した業務改善、社内や庁内データの利活用などを提案しております。
お気軽にご相談ください。
エアロトヨタ株式会社ーQGIS
QGISコラム エアロトヨタ株式会社
