Java - How to stop Excel from converting hex value to number automatically

在這邊要探討的是,透過Java輸出一CSV file,以Excel打開時會將十六進位的值自動轉換成數值,如00000001 => 1,但是我們要呈現的是前者而非後者,因此該如何讓Excel認為該cell的值為字串而非數值?! 若是字串的話就不會自動轉換了!

相關程式碼如下:
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看起來無任何符號出現且不會被轉換! 這樣似乎是我們要的結果!

留言