在這邊要探討的是,透過Java輸出一CSV file,以Excel打開時會將十六進位的值自動轉換成數值,如00000001 => 1,但是我們要呈現的是前者而非後者,因此該如何讓Excel認為該cell的值為字串而非數值?! 若是字串的話就不會自動轉換了!
相關程式碼如下:
透過上述的code得到的結果如下:
發現A1 ~ A10的值都被自動轉換成數值了
方法一:
我們在輸出時於字串前面加上單引號,如下:
可以表示成,00000000 => '00000000
看起來輸出的結果,雖然可以避免hex value被自動轉換,可是字面上看起來會多了個單引號,除非如A1被造訪過(點擊過後)之後,單引號才會消失!
PS. 我們不可能每個value都造訪
方法二:
我們在輸出字串的前後加上雙引號及前面加上等號
可以表示成, 00000000 => = "00000000"
如此一來在Excel內A1 ~ A10看起來無任何符號出現且不會被轉換! 這樣似乎是我們要的結果!
相關程式碼如下:
char ch = 65;
try (BufferedWriter bw = new BufferedWriter(new FileWriter(new File("OutputCSV.csv")))){
for(int i = 0 ; i < 16 ; i++) {
String value = null;
if(i < 10) {
value = "0000000"+i;
}else {
value = "0000000"+(ch++);
}
bw.write(value);
bw.newLine();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
透過上述的code得到的結果如下:
發現A1 ~ A10的值都被自動轉換成數值了
方法一:
我們在輸出時於字串前面加上單引號,如下:
bw.write("'"+value);
可以表示成,00000000 => '00000000
看起來輸出的結果,雖然可以避免hex value被自動轉換,可是字面上看起來會多了個單引號,除非如A1被造訪過(點擊過後)之後,單引號才會消失!
PS. 我們不可能每個value都造訪
方法二:
我們在輸出字串的前後加上雙引號及前面加上等號
bw.write("= "+'"'+value+'"');
可以表示成, 00000000 => = "00000000"
如此一來在Excel內A1 ~ A10看起來無任何符號出現且不會被轉換! 這樣似乎是我們要的結果!
留言
張貼留言