Posts

Gem rubyXL を使用した際に起こったエラーおよび対応について

  • POST
Gem rubyXL を使用している際に起こったエラーとその対処方法を備忘録として残しておく 環境 rails: rails 5.2.2 rubyXL: Ver.3.4.0 rubyXL について 拡張子「xlsx」を読み書き可能なライブラリ 使用感としてはテンプレートとなる Excel に対して読み書きする場合には 問題なく使用可能 但し、テンプレートに数式やグラフが含まれている場合に行などを 追加した場合に出力された Excel ファイルが破損して起動不可になる場合が あるため注意が必要 rubyXL 発生した障害とその対応 テキストの折り返しがsheet.add_cellではできない sheet.add_cell(col, row, 'text').change_text_wrap によって実装可能 テキストを折り返して表示してくれるようになる change_contents が使えない version 3.4.0 以降は convenience_methods を呼び出さないと利用不可 # require が必要なメソッド require 'rubyXL/convenience_methods/cell' require 'rubyXL/convenience_methods/color' require 'rubyXL/convenience_methods/font' require 'rubyXL/convenience_methods/workbook' require 'rubyXL/convenience_methods/worksheet' もしくは以下で全て使用可 require 'rubyXL/convenience_methods' シートのコピーができない Marshal.load なども試してみたが、上手くいかなかったので以下を参考にして対応 参考サイト シートコピー後、コピーしたシートを編集したら他のシートの内容も一緒に変わってしまう change_contents の仕様と上記のシートコピーによって生じた現象 ① シートの書式等をコピー ② change_contents で書式設定を保持したまま内容を変更 ③ 該当するコピーシートすべての内容が書き換わる という動作をしている => add_cell による値の挿入で対応 ※上記の場合は書式設定等は rubyXL 側で行う必要がある 動的な配置で Excel の数式を設定する insert_row 等で行の挿入を動的に行った場合に Excel の数式によって値の算出を行いたい ※insert_row は公式でも書かれているが扱いに慎重になるべきメソッドで、結合したセルや数式が挿入した行の下にあった場合に Excel が破損することがある

Hugo に数式を挿入する その2

  • POST
[前回までの記事] Hugo に数式を挿入する 経緯 mathjax のバージョンを 3 系 にアップデートした際に単純にいかなかったので備忘録として残しておく 手順 参考 を見ながらアップデートする ※version2 から version 3 への変換を利用 partials フォルダ配下の以下のファイルを修正する CDN で提供されている最新の MathJax.js の URL は、cdnjs.com で確認する <script type="text/javascript"> MathJax = { tex: { inlineMath: [['$','$'], ['\\(','\\)']], processEscapes: true, tags: "ams", autoload: { color: [], colorV2: ['color'] }, packages: {'[+]': ['noerrors']} }, chtml: { matchFontHeight: false, displayAlign: "left", // version 2 で css で変更していた 数式の表示位置の設定 displayIndent: "2em" }, options: { skipHtmlTags: ['script', 'noscript', 'style', 'textarea', 'pre'], renderActions: { /* これを記述しないと インライン数式(例. ${}_n \mathrm{ P }_k$) が機能しない */ find_script_mathtex: [10, function (doc) { for (const node of document.querySelectorAll('script[type^="math/tex"]')) { const display = !!node.type.match(/; *mode=display/); const math = new doc.options.MathItem(node.textContent, doc.inputJax[0], display); const text = document.createTextNode(''); node.parentNode.replaceChild(text, node); math.start = {node: text, delim: '', n: 0}; math.end = {node: text, delim: '', n: 0}; doc.math.push(math); } }, ''] } }, loader: { load: ['[tex]/noerrors'] } }; </script> <script type="text/javascript" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js" id="MathJax-script"></script> 1 で作成した partial を head or footer で読込