質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

5003閲覧

POIでExcel出力をしていますが…Styleの挙動がおかしいです。

HisashiSakamoto

総合スコア28

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2019/01/18 11:01

データベースの中に、下のようなStringの形でデータが有るのですが、これをApache POIを利用してExcelの文字色にあてたいと思っています。

#062C54 #8491C3 #2A4073 #D4ECEE #0086CC #DFF2FC #002E4E #181B39 #005B98 #0086A2 #003A47 #EBF4F4 #7EC7D8 #004150 #BCE1DF #887B3E

下記のソースコードで文字色はちゃんと出るのは出るのですが、全ての文字が最後の色(#887B3E)黄土色になってしまうのです。

下記にサーブレットのソースコードを掲載しますので、どこに問題があるかご教示いただけますと幸いです。よろしくお願いいたします。
Excelファイルの出力先は、適宜変更していただけますと幸いです。

なお、Listのサイズは可変(上記のカラーコードの数が変わるということ)という前提でコードを書いています。

Java

1import java.awt.Color; 2import java.io.FileOutputStream; 3import java.io.IOException; 4import java.io.OutputStream; 5import java.net.URLEncoder; 6import java.util.ArrayList; 7import java.util.List; 8import java.util.Map; 9import java.util.TreeMap; 10 11import javax.servlet.ServletException; 12import javax.servlet.http.HttpServlet; 13import javax.servlet.http.HttpServletRequest; 14import javax.servlet.http.HttpServletResponse; 15import javax.servlet.http.HttpSession; 16 17import org.apache.poi.hssf.util.HSSFColor; 18import org.apache.poi.ss.usermodel.BorderStyle; 19import org.apache.poi.ss.usermodel.Cell; 20import org.apache.poi.ss.usermodel.CellStyle; 21import org.apache.poi.ss.usermodel.CellType; 22import org.apache.poi.ss.usermodel.DataFormat; 23import org.apache.poi.ss.usermodel.FillPatternType; 24import org.apache.poi.ss.usermodel.Row; 25import org.apache.poi.ss.usermodel.Sheet; 26import org.apache.poi.ss.usermodel.VerticalAlignment; 27import org.apache.poi.ss.util.CellRangeAddress; 28import org.apache.poi.xssf.streaming.SXSSFCell; 29import org.apache.poi.xssf.streaming.SXSSFSheet; 30import org.apache.poi.xssf.streaming.SXSSFWorkbook; 31import org.apache.poi.xssf.usermodel.IndexedColorMap; 32import org.apache.poi.xssf.usermodel.XSSFCellStyle; 33import org.apache.poi.xssf.usermodel.XSSFColor; 34import org.apache.poi.xssf.usermodel.XSSFFont; 35 36 public static void main(String[] args) { 37 38 String outputFilePath = "C:/Users/(ここにユーザ名など)/Documents/out.xlsx"; 39 FileOutputStream fout = null; 40 41 List<String> list = new ArrayList<String>(); 42 43 list.add("#062C54"); 44 list.add("#8491C3"); 45 list.add("#2A4073"); 46 list.add("#D4ECEE"); 47 list.add("#0086CC"); 48 list.add("#DFF2FC"); 49 list.add("#002E4E"); 50 list.add("#181B39"); 51 list.add("#005B98"); 52 list.add("#0086A2"); 53 list.add("#003A47"); 54 list.add("#EBF4F4"); 55 list.add("#7EC7D8"); 56 list.add("#004150"); 57 list.add("#BCE1DF"); 58 list.add("#887B3E"); 59 60 SXSSFWorkbook book = new SXSSFWorkbook(list.size()); 61 62 Cell cell; 63 Row[] row = new Row[list.size()]; 64 65 XSSFFont font = (XSSFFont) book.createFont(); 66 XSSFCellStyle[] style = new XSSFCellStyle[list.size()]; 67 68 Sheet sheet = book.createSheet(); 69 int[] dec_color = new int[3];/*RGBそれぞれの10進数を入れる*/ 70 String color_code = ""; 71 72 for (int i = 0; i < list.size(); i++) { 73 74 color_code = list.get(i); 75 76 String red = color_code.substring(1, 3); 77 String green = color_code.substring(3, 5); 78 String blue = color_code.substring(5, 7); 79 80 dec_color[0] = Integer.parseInt(red, 16); 81 dec_color[1] = Integer.parseInt(green, 16); 82 dec_color[2] = Integer.parseInt(blue, 16); 83 84 font.setColor(new XSSFColor(new Color(dec_color[0], dec_color[1], dec_color[2]))); 85 86 style[i] = (XSSFCellStyle) book.createCellStyle(); 87 style[i].setFont(font); 88 89 row[i] = sheet.createRow(i + 1); 90 91 cell = row[i].createCell(0); 92 93 cell.setCellStyle(style[i]); 94 cell.setCellType(CellType.STRING); 95 cell.setCellValue(list.get(i)); 96 97 } 98 99 try { 100 fout = new FileOutputStream(outputFilePath); 101 book.write(fout); 102 } catch (IOException e) { 103 e.printStackTrace(); 104 } 105 106 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

fontという変数が一つしかなく、全てのセルのスタイルにその変数が代入されてて、それの色がどんどん変わっていって、最後に書き込みが起こるからではないでしょうか

投稿2019/01/18 11:15

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HisashiSakamoto

2019/01/18 13:56

まさにそのとおりで、Font[]にすると、解決しました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問