xoffice2txt (jom、nmake版) gitで管理しているExcelやWordファイルをテキスト化して差分を見れるようにするためのアプリ(Windows用)

処理の概要
LibreOfficeでExcelなどのオフィス系ファイルをhtml化し、それをlynxでテキスト化します。

インストールしてパスを通す必要があるもの
libreoffice
https://ja.libreoffice.org/

(pythonをインストールしている場合は、環境変数の定義の並び順を
LibreOfficeの環境変数より前にpythonの環境変数を設定しておく必要があります。
LibreOfficeのprogramフォルダーにLibreOffice用のpythonが存在するためです。)

lynx
https://lynx.invisible-island.net/
https://invisible-island.net/lynx/#installers
Stable releaseのslangにある
lynx-sl-setup.exeをダウンロードする。

nkf32
https://www.vector.co.jp/soft/win95/util/se295331.html

jom(nmake互換make)
https://wiki.qt.io/Jom
http://download.qt.io/official_releases/jom/jom.zip
をダウンロードする

nmakeを使う場合はVisualStudio等に同梱されているものを使う

当アプリは、日本語名のExcel等のファイルを扱う場合、
読み込みファイル(text_file_names.txt)はUTF-8BOMである必要があります。

jomの場合
下記から
xoffice2txt.bat
xoffice2txt.jom
をコピペ、保存して(xoffice2txt.jomはsjisでもutf-8でもよい)
Excel、Wordファイルがあるフォルダーへ置き
jom -lf xoffice2txt.jom init_file
を実行してから
xoffice2txt.bat
をコマンドラインからの実行か、ダブルクリックで処理開始します。

nmakeの場合
下記から
xoffice2txtnmake.bat
xoffice2txt.jom
をコピペ、保存して(xoffice2txt.jomはsjisでもutf-8でもよい)
Excel、Wordファイルがあるフォルダーへ置き
nmake /nologo /f xoffice2txt.jom init_file
を実行してから
xoffice2txtnmake.bat
をコマンドラインからの実行か、ダブルクリックで処理開始します。

############################################################
jom版
xoffice2txt.bat
----------------------------------------------------------------------------------------------------
::This software includes the work that is distributed in the Apache License 2.0.
::https://www.apache.org/licenses/LICENSE-2.0

@echo off

::最初に
::jom -lf xoffice2txt.jom init_file
::を実行しておく

set text_file_names=text_file_names.txt

jom -lf xoffice2txt.jom -j 1 TEXT_FILE_NAMES=%text_file_names% %*
jom -lf xoffice2txt.jom clean_tmp

############################################################
nmake版
xoffice2txtnmake.bat
----------------------------------------------------------------------------------------------------
::This software includes the work that is distributed in the Apache License 2.0.
::https://www.apache.org/licenses/LICENSE-2.0

@echo off

::最初に
::nmake /nologo /f  xoffice2txt.jom init_file
::を実行しておく

set text_file_names=text_file_names.txt

nmake /nologo /f xoffice2txt.jom TEXT_FILE_NAMES=%text_file_names% %*
nmake /nologo /f xoffice2txt.jom clean_tmp

----------------------------------------------------------------------------------------------------
jom版
xoffice2txt.jom
----------------------------------------------------------------------------------------------------
#This software includes the work that is distributed in the Apache License 2.0.
#https://www.apache.org/licenses/LICENSE-2.0

#xoffice2txt
#for jom (nmake)

#当ファイルをjomで実行時はオプションを -j 1で実行する必要があります

.SUFFIXES:
.SUFFIXES: .txt .xlsx .xls .ods .docx .doc .odt

TEXT_FILE_NAMES = text_file_names.txt

NKF = nkf32

LO_LANGUAGE = ja
LX_CHARSET = shift_jis
LX_WIDTH = 100

tmp_dir = tmp_xoffice2txt_files

LIBREOFFICE = soffice --nolockcheck --nologo --headless --norestore\
				--language=$(LO_LANGUAGE) --nofirststartwizard --convert-to

LYNX = lynx -display_charset=$(LX_CHARSET) -width=$(LX_WIDTH) -nolist -nomargins -dump

!IF EXIST ($(TEXT_FILE_NAMES))
!include $(TEXT_FILE_NAMES)
!ENDIF

all: $(tmp_dir) $(FILES)

$(tmp_dir):
	if not exist $(tmp_dir) mkdir $(tmp_dir) > nul

init_file:
	call <<createfile.bat
@echo off
setlocal enableDelayedExpansion
(echo FILES =\) > $(TEXT_FILE_NAMES)
for /r %CD% %%A in (*.xls? *.ods *.doc? *.odt) do (
	set file_path=%%~dpA
	(echo !file_path:%CD%\=!%%~nA.txt\) >> $(TEXT_FILE_NAMES)
)
set make_name=$(MAKE)
if "%make_name:~-7%" == "jom.exe" (
	if "$(LO_LANGUAGE)" == "ja" ($(NKF) --overwrite --oc=UTF-8-BOM $(TEXT_FILE_NAMES))
)
endlocal
<<

clean_tmp:
	rmdir /s /q $(tmp_dir)

clean:
	del $(FILES)

#MSOffice

.xlsx.txt:
	$(LIBREOFFICE) "html:HTML (StarCalc)" --outdir $(@D) $<
	$(LYNX) $*.html > $@
	if "$(LO_LANGUAGE)" == "ja" ($(NKF) -w -Lw --overwrite $@)
	if exist $*.html move /y $*.html $(tmp_dir) > nul
	if exist $*_html_*.png move /y $*_html_*.png $(tmp_dir) > nul

#abcというフォルダー配下にファイルが存在する場合には手作業で下記のように処理ブロックを複製し、追記する
{abc}.xlsx{abc}.txt:
	$(LIBREOFFICE) "html:HTML (StarCalc)" --outdir $(@D) $<
	$(LYNX) $*.html > $@
	if "$(LO_LANGUAGE)" == "ja" ($(NKF) -w -Lw --overwrite $@)
	if exist $*.html move /y $*.html $(tmp_dir) > nul
	if exist $*_html_*.png move /y $*_html_*.png $(tmp_dir) > nul

.xls.txt:
	$(LIBREOFFICE) "html:HTML (StarCalc)" --outdir $(@D) $<
	$(LYNX) $*.html > $@
	if "$(LO_LANGUAGE)" == "ja" ($(NKF) -w -Lw --overwrite $@)
	if exist $*.html move /y $*.html $(tmp_dir) > nul
	if exist $*_html_*.png move /y $*_html_*.png $(tmp_dir) > nul

.docx.txt:
	$(LIBREOFFICE) "html:HTML (StarWriter)" --outdir $(@D) $<
	$(LYNX) $*.html > $@
	if "$(LO_LANGUAGE)" == "ja" ($(NKF) -w -Lw --overwrite $@)
	if exist $*.html move /y $*.html $(tmp_dir) > nul
	if exist $*_html_*.png move /y $*_html_*.png $(tmp_dir) > nul

.doc.txt:
	$(LIBREOFFICE) "html:HTML (StarWriter)" --outdir $(@D) $<
	$(LYNX) $*.html > $@
	if "$(LO_LANGUAGE)" == "ja" ($(NKF) -w -Lw --overwrite $@)
	if exist $*.html move /y $*.html $(tmp_dir) > nul
	if exist $*_html_*.png move /y $*_html_*.png $(tmp_dir) > nul

#LibreOffice

.ods.txt:
	$(LIBREOFFICE) "html:HTML (StarCalc)" --outdir $(@D) $<
	$(LYNX) $*.html > $@
	if "$(LO_LANGUAGE)" == "ja" ($(NKF) -w -Lw --overwrite $@)
	if exist $*.html move /y $*.html $(tmp_dir) > nul
	if exist $*_html_*.png move /y $*_html_*.png $(tmp_dir) > nul

.odt.txt:
	$(LIBREOFFICE) "html:HTML (StarWriter)" --outdir $(@D) $<
	$(LYNX) $*.html > $@
	if "$(LO_LANGUAGE)" == "ja" ($(NKF) -w -Lw --overwrite $@)
	if exist $*.html move /y $*.html $(tmp_dir) > nul
	if exist $*_html_*.png move /y $*_html_*.png $(tmp_dir) > nul

----------------------------------------------------------------------------------------------------
おまけ
touchwin.bat
----------------------------------------------------------------------------------------------------
::This software includes the work that is distributed in the Apache License 2.0.
::https://www.apache.org/licenses/LICENSE-2.0

@echo off

for %%A in (%*) do (
	if not exist %%A (
		type nul > %%A
	) else (
		copy /b %%A +,, > nul
	)
)

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です