- PR -

DOMからExcel(SpreadsheetML)出力で、セル内改行ができません.

1
投稿者投稿内容
toshi
会議室デビュー日: 2007/05/24
投稿数: 11
投稿日時: 2007-09-14 13:51
お世話になります.
この会議室でも過去に同じようなXSLTでSpreadsheetMLを作る話がありましたが、私の場合は元がDOMです.

いくつかのXMLファイルをマッチングさせてSpreadsheetMLを作るGUIをJavaで作製しています.大体うまく行っているのですが、セル内の改行が出力したSpreadsheetMLをExcel2003で読み込んだ時にうまく機能していないことに気がつきました.スペースで区切られていて、行は団子状態でつながってしまっています.しかしDOM上で改行を入れるときはちゃんと\nを入れています.

@ DOMからのシリアライズは当初javax.xml.transformを使っていましたが、これだとすべて\r\nになってしまうため止めました.

A 代わりに使ったのは、org.w3c.dom.ls.LSSerializerです.これには、setNewLine()というメソッドがあるので、setNewLine("\n");と指定しています.

B 出力結果のSpreadsheetMLですが改行はすべて\r\nではなくて\nになっていることが確認できました.もちろんセル内のテキストも同じです.ところがこれをExcel2003で読むと、セル内で改行してくれず本来の行間が空白表示になってしまいます.(エディタでセルをCopy/Pasteしてコードを調べるとスペースだった)

C 仕方がないので、手作業でSpreadsheetMLのセル内の改行の\nを
に変えてみます.するとExcelではちゃんと改行してくれるようになります.

元がDOMなのでちょっと困りきっています.何かセル内で改行させるうまい手はないでしょうか?

何か情報ありましたらよろしくお願いします.

以上
toshi
会議室デビュー日: 2007/05/24
投稿数: 11
投稿日時: 2007-09-14 18:35
自己RESです.

javax.xml.transformもorg.w3c.dom.ls.LSSerializerもあてにならないので、自分でシリアライザークラスを作製してみました.

この中で、ノードを再帰的に巡回し、Row→Cell→Data内のテキストだけは、\nを強制的に
に変換しました.DOM全体としてはPrintWriterでファイル出力してみました.

ネームスペースの扱いで若干苦労しましたが、基本的にはExcelで読み込んでセル内で改行して表示できるようになりました.

お騒がせしました.どうもありがとうございました.

#しかしSpreadsheetMLってなんか癖があって変!!!

以上
1

スキルアップ/キャリアアップ(JOB@IT)