TortoiseSVNでエラー発生

バージョンアップのポップアップがウザイのでアップデートしたら、BDB接続できずにエラーが出るようになりました。
Windows2k・ローカルリポジトリの話です。

— エラー内容

エラー: URL に対し ra_local セッションを開始できません
エラー: リポジトリ 'file:///D:/SVN/test.com' を開けませんでした
エラー: ファイルシステム D:/SVN/db に対して opening environment をしているときに Berkeley DB エラーが起きました
エラー: DB_VERSION_MISMATCH:
エラー: Database environment version mismatch
エラー: bdb: Program version 4.3 doesn't match environment version  

いつもお世話になっているGoogleで調べてみました。[参考]
…が、日本語の情報が少ない。。。

とにかく上記のtakeyama’s blog様を参考にして復旧してみました。

— コマンドライン版のインストール
http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91

svn-1.1.4-setup.exeをダウンロード。(svn-1.2.0-setup.exeよりこっちの方がいいみたい)

— Berkeley DBのリカバリ

http://subversion.tigris.org/faq.html#bdb43-upgrade

引用

Normally one can simply run svnadmin recover to upgrade a
Berkeley DB repository in-place. However, due to a bug in the way
this command invokes the db_recover() API, this won’t work
correctly when upgrading from BDB 4.0/4.1/4.2 to BDB 4.3.

Use this procedure to upgrade your repository in-place to BDB 4.3:

  • Make sure no process is accessing the repository (stop
    Apache, svnserve, restrict access via file://, svnlook, svnadmin,
    etc.)
  • Using an older svnadmin binary (that is, linked to
    an older BerkeleyDB):

    1. Recover the
      repository: ‘svnadmin recover /path/to/repository
    2. Make a backup of the repository.
    3. Delete all unused log files. You can see them by running
      svnadmin list-unused-dblogs /path/to/repeository
    4. Delete the shared-memory files. These are files in the
      repository’s db/ directory, of the form __db.00*

The repository is now usable by Berkeley DB 4.3.

上記の通りやっていったら、ちゃんとインポート・エクスポートできるようになりました。

Spreadsheet_Excel_Writer

こんな簡単に出来るとは知りませんでしたorz

インストールの際にOLEが必要なのでインストールする。

pear install OLE
pear install Spreadsheet_Excel_Writer

直接アーカイブをダウンロードするにはhttp://pear.php.net/package/Spreadsheet_Excel_Writerから。

ファイル生成のテスト

<?php
//PEARクラスのインクルード
include_once("Spreadsheet/Excel/Writer.php");
//ワークブックの生成
$workbook = new Spreadsheet_Excel_Writer();
//ワークシートの生成
$worksheet =& $workbook->addWorksheet(mb_convert_encoding("シート1","SJIS"));

//列幅の設定
$worksheet->setColumn(0,0,5);    //1列目幅5
$worksheet->setColumn(1,1,10);   //2列目幅10
$worksheet->setColumn(2,5,2);    //3-6列目幅2

//書式の設定
$format1 =& $workbook->addFormat();
$format1->setColor("red");
$format1->setBold(1);
$format1->setItalic(1);
$format1->setBorder(1);
$format1->setBorderColor("blue");

//値を定義
$worksheet->write(0,0,"001");
$worksheet->writeString(0,1,mb_convert_encoding("ほげほげ","SJIS"),$format1);
$worksheet->writeNumber(1,0,"001",$format1);
//式を定義
$worksheet->writeFormula(2,0,"=SUM(A1:A2)");

//HTTPヘッダー出力
$workbook->send("sample2.xls");
//excel出力
$workbook->close();

exit;
?>

概ねこんな感じ。

jakartaPOI

javaでexcelの操作をするAPI

http://jakarta.apache.org/poi/のDownloadから適当なリンクをクリックする。
今回はhttp://ftp.kddilabs.jp/infosystems/apache/jakarta/poi/dev/bin/poi-bin-2.0-RC2-20040102.tar.gzから取得。

解凍して出来たファイルのpoi-2.0-RC2-20040102.jarを適当なディレクトリにコピーする。

サンプルファイルを作成

hoge.java

import java.io.*;
import org.apache.poi.hssf.usermodel.*;
import java.util.Date;

public class hoge{
	public static void main(String[] args){
		HSSFWorkbook workbook = new HSSFWorkbook();

		//シートを2枚作成
		HSSFSheet sheet1 = workbook.createSheet("hoge");
		HSSFSheet sheet2 = workbook.createSheet("test");
		//2枚目のシートの名前を日本語に変更する
		workbook.setSheetName(1,"テスト",HSSFWorkbook.ENCODING_UTF_16);

		//1枚目のシートにセルを作成する
		HSSFRow row = sheet1.createRow(0);
		HSSFCell cell = row.createCell((short)1);
		HSSFCell cell2 = row.createCell((short)2);
		HSSFCell cell3 = row.createCell((short)3);
		HSSFCell cell4 = row.createCell((short)4);
		HSSFCell cell5 = row.createCell((short)5);

		//値を定義
		boolean val1 = true;
		String val2 = "hogehoge";
		Date val3 = new Date();
		double val4 = 1234.56;
		String val5 = "ほげほげ日本語";

		//日本語を使うためcell5をエンコード
		cell5.setEncoding(HSSFCell.ENCODING_UTF_16);

		//cell3を日付型にセット
		HSSFCellStyle styleDate = workbook.createCellStyle();
		styleDate.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
		cell3.setCellStyle(styleDate);

		//セルに値をセット
		cell.setCellValue(val1);
		cell2.setCellValue(val2);
		cell3.setCellValue(val3);
		cell4.setCellValue(val4);
		cell5.setCellValue(val5);

		FileOutputStream out = null;
		try{
			//ファイルに書き出し
			out = new FileOutputStream("hoge.xls");
			workbook.write(out);
		}catch(IOException e){
			System.out.println(e.toString());
		}finally{
			try{
				out.close();
			}catch(IOException e){
				System.out.println(e.toString());
			}
		}
	}
}

コンパイルして実行。
クラスパスが通っていなければ付け加える。

javac -classpath /j2sdk/jar/poi/poi-2.0-RC2-20040102.jar hoge.java
java -classpath /j2sdk/jar/poi/poi-2.0-RC2-20040102.jar:. hoge

1シート目の一行目に5個の値が入ったファイルができる。