1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Excelのリンク集をHTMLに変換するPythonスクリプト作った

Posted at

はじめに

自分のよく利用するサイトはVivaldiのスピードダイヤルに登録していますが、そこに追加するほどでもないが定期的にアクセスする必要のあるサイト(主に就活のマイページ等)がいくつかあります。Excelにリンクをまとめていたのですが、いちいちExcelを起動するのは無駄だと感じていました。

そこで、HTMLで一覧表示するページを作成してスピードダイヤルに追加しておけば、ブラウジング中にExcelを起動する必要なくリンクへ移動することができると考え、HTMLで書くことにしました。
しかし、編集する際にはExcelの方が楽であるため、「Excel→HTML変換」のプログラムを作成することにしました。

できること

  • ブラウザで開けるリンク集
  • Excelで作成したリンク集をHTMLに変換(表形式)
  • リンクの説明を記載
  • リンクへジャンプする際に指定した文字列を1つコピー(ログインID等)

変換する形式

今回私の作成したPythonスクリプトでは以下の形式のExcelシートをHTMLに変換する。メモが欲しければ、これらの右隣に備考などを書くことも可能。(HTMLに反映するためには少し変更が必要)

image.png

変換後は以下のようなページとなる。Qiitaをクリックするとhttps://qiita.com/にアクセスするとともにQiitaという文字がコピーされる。

スクリーンショット 2019-09-10 2.33.58.png

生成されるHTML

以下の形式でリンク集を作成することにした。

links.html
<!DOCTYPE html>
<html links>
    <div style="margin:20px 0">
        test page<br />

        <table border="1">
          <tr>
            <th>Qiita Home</th> <th><a href="https://qiita.com/" onclick="link_copy(this)">Qiita</a></th>
          </tr>
          <tr>
            <th>Google Home</th> <th><a href="https://google.com/" onclick="link_copy(this)">Google</a></th>
          </tr>
        </table>

        <script>
            function link_copy(element){
                let range = document.createRange();
                range.selectNodeContents(element);

                let selection = document.getSelection();
                selection.removeAllRanges();
                selection.addRange(range);
                document.execCommand('copy');
            }
        </script>
    </div>
    </body>
</html>

変換器

xlrdというExcelを読み書きするライブラリを使用することにした。
Pythonスクリプトの書き方は非常にダサいが、なんとか変換器が完成した。

converter.py
import xlrd

wb = xlrd.open_workbook('links.xlsx')
sheet = wb.sheet_by_name('Sheet1')

html_header = '<!DOCTYPE html>\n<html links>\n<div style="margin:20px 0">\n<h1>' + str(sheet.cell_value(0,0)) + '</h1><br />\n'
html_footer = ' <script>\n function link_copy(element){\n let range = document.createRange();\n range.selectNodeContents(element);\n let selection = document.getSelection();\n selection.removeAllRanges();\n selection.addRange(range);\n document.execCommand("copy");\n }\n </script>\n </div>\n </body>\n </html>'

outputpath = './links.html'
with open(outputpath, mode='w') as f:
    f.write(html_header)
    f.write('<table border="1">')
    for i in range(4, sheet.nrows):
        f.write('<tr> <th>')
        f.write(sheet.cell_value(i,0))
        f.write('</th> <th>')
        this_link = '<a href="'
        this_link += str(sheet.cell_value(i,1))
        this_link += '" onclick="link_copy(this)">'
        this_link += str(sheet.cell_value(i,2))
        this_link += '</a></th></tr>\n'
        f.write(this_link)
    f.write('</table>')
    f.write(html_footer)
print('link collection is generated.')

生成されたHTMLファイルをブラウザのショートカットに設定することで、ブラウジングの途中に思い立った時にページリストを確認したりアクセスできる。満足。

おわりに

今回はデザインのしょぼいページを作成しましたが、今後慣れてきたらオシャレなページも作ってみたいと思っています。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?