云
2 天以前 657698fd2fb32794932474648dbaee9e284e38c8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.nio.file.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
class ExtractStockXls {
 static String q(String s){return "\""+s.replace("\\","\\\\").replace("\"","\\\"").replace("\r","\\r").replace("\n","\\n").replace("\t","\\t")+"\"";}
 public static void main(String[] a)throws Exception{
  StringBuilder o=new StringBuilder("[");
  try(var w=new HSSFWorkbook(Files.newInputStream(Path.of(a[0])))){
   for(int si=0;si<w.getNumberOfSheets();si++){
    var s=w.getSheetAt(si);if(si>0)o.append(',');o.append("{\"sheet\":").append(q(s.getSheetName())).append(",\"rows\":[");
    for(int ri=0;ri<=s.getLastRowNum();ri++){
     if(ri>0)o.append(',');o.append('[');var r=s.getRow(ri);
     if(r!=null)for(int ci=0;ci<r.getLastCellNum();ci++){
      if(ci>0)o.append(',');var c=r.getCell(ci);if(c==null){o.append("null");continue;}
      var t=c.getCellType()==CellType.FORMULA?c.getCachedFormulaResultType():c.getCellType();
      switch(t){
       case NUMERIC -> o.append(java.math.BigDecimal.valueOf(c.getNumericCellValue()).stripTrailingZeros().toPlainString());
       case STRING -> o.append(q(c.getStringCellValue()));
       case BOOLEAN -> o.append(c.getBooleanCellValue());
       case ERROR -> o.append("{\"error\":").append(q(FormulaError.forInt(c.getErrorCellValue()).getString())).append('}');
       default -> o.append("null");
      }
     }o.append(']');
    }o.append("],\"merged\":[");for(int i=0;i<s.getNumMergedRegions();i++){if(i>0)o.append(',');o.append(q(s.getMergedRegion(i).formatAsString()));}o.append("]}");
   }
  }o.append(']');Files.writeString(Path.of(a[1]),o.toString());
 }
}