2020年3月29日日曜日

エクセルで他のエクセルファイルを汎用的にリンクするには

・エクセルで他のファイルをリンクするとき問題になるのが、リンク先の場所が変更なった場合ですが、そういった場合でも、対処できるように、パスを設定シートのセルに保存しておくようにするといいと思います。
・さらに、汎用性高めるため、ひとつのリンクセルの式をそのままコピペすることができるようにしておくと便利です。

 そこで、次のようなものを作成してみました。まず、設定シートに以下のようなパスをいれておきます。
 設定!B2セルに E:\Mydocuments\[Book3.xlsx]Sheet1


つぎに、これを読み取るセルは次のようになります。
 =INDIRECT("'"&INDIRECT("設定!$B$2")&"'!"&ADDRESS(ROW(),COLUMN()))
 このようにすることで、このセルを他の場所にコピペすることで、広い範囲のリンクを表示させることができます。
 ただし、リンク先のエクセルファイルは開いている状態になっている必要があります。

なお、この式をつくりながらきづいたのですが、INDIRECTとADRESS、ROW,COLUMNは組み合わせて使うと便利な場面がいろいろありそうです。
たとえば
=INDIRECT("Sheet2!"&ADDRESS(ROW(),COLUMN()))
なども、式のコピペが簡単にできますが、単に別シートの位置のデータのリンクを生成するだけです。ROWやCOLUMNは数値なので、2倍して足したり引いたりなどして、リンク先の任意の場所のデータを1行おきや1列おきに参照したりも可能になります。

PDFをC#で作成 フォントについて


https://gammasoft.jp/blog/pdf-japanese-font-by-csharp/
を参考にさせていただきました。PDFsharpを使いました。
フォントが問題なるようですが、上記のプログラムを参考にさせていただきました。
明朝体を使いたかったので、IPAからフォントを入手して使ってみました。

C#でフォントのプロパティでビルドアクションを埋め込みソースにします。
あとレゾルバーのソースに何行か追加しますが、最初
  private static readonly string IPAMJM_TTF =  "<プロジェクト名>.fonts.ipamjm.ttf";
の<プロジェクト名>.fontsの部分をうっかり入れ忘れて、気づくまでしばらくかかってしまいました。ここ以外は、他の行を参考にすれば、変更方法は類推できると思います。

2020年3月20日金曜日

eclipseのgitについて

https://www.gwtcenter.com/egit-first-step
などを参考に、使い方を確認した。

ただ、なぜかうまくいかない。コミットもうまくいかない。
なぜだろうといろいろ考えながら、フォルダの中を直接のぞいてみると
あちこちに.gitフォルダや.gitignoreのファイルが散らばっている。いろいろ試しいるうちに増えてしまい、それがそのまま残っていたのが原因のようだった。
これらのファイルをすべて削除したら、うまく動作した。

2020年3月7日土曜日

POIでセル結合ありのエクセルデータをHTMLに変換

エクセルデータをHTMLに変換する方法を考えてみた。
http://higehige0.blog.fc2.com/blog-entry-57.html
を参考にさせていただきました。

int cct,int yiがセルの列位置、行位置
List<CellRangeAddress> rangeLstは、上記リンクを参照

Javaも関数型プログラミングが使えるようになってきたので、早速使ってみました。
String LTdt=  rangeLst.stream().filter(x->x.getFirstRow()==yi&&x.getFirstColumn()==cct).map(x->cct+","+yi+","+x.getLastColumn()+","+x.getLastRow()).findAny().orElse("");
String LTdt2= rangeLst.stream().filter(
        x->x.getFirstRow()<yi && x.getLastRow()>=yi && x.getFirstColumn()<cct && x.getLastColumn()>=cct
           || x.getFirstRow()==yi && x.getFirstColumn()<cct && x.getLastColumn()>=cct
           || x.getFirstRow()<yi && x.getLastRow()>=yi && x.getFirstColumn()==cct
        ).map(x->"DEL").findAny().orElse("");

LTdt、LTdt2の文字があるかどうかで、3パターンに分類して処理するとOkでした。
分類部分は省略しますが、表示部分は以下のような感じです。
・cst="<td >"+cellValue+"</td>";
・String CrSt[]=LTdt.split(",");
 String tdst="";
 if(!CrSt[0].equals(CrSt[2])) {
tdst=" colspan=\""+  ( Integer.parseInt(CrSt[2])-Integer.parseInt(CrSt[0]) +1 )+"\"";        }
 if(!CrSt[1].equals(CrSt[3])) {
tdst=tdst+" rowspan=\""+  ( Integer.parseInt(CrSt[3])-Integer.parseInt(CrSt[1]) +1 )+"\"";        }
 cst="<td "+width+" align=left "+tdst+">"+cellValue+"</td>";
・cst="";

2020年3月5日木曜日

groupsessionをeclipseで動かす

groupsessionの最新版をeclipseのTomcatで動かしてみる。
マニュアルにしたがいJdk、Tomcat等のバージョンがうまく合わないと動かない。
・AdoptOpenJDK 11をインストール
 ウインドウ>設定>Java>インストール済みのJREで検索で、インストール先のjdk-云々のフォルダを指定、適用
・Tomcatバージョンは8
 ウインドウ>Tomcatでバージョンを8にして、Tomcatホームも8のフォルダに合わせる。
 ウインドウ>Tomcat>JVM設定で JREをjdk-11.0云々に合わせる。
 Tomcatをデバッグモードで起動しないにチェック
 JVMパラメータへの追加で、Tomcatで使うメモリサイズも指定できる