2016-02-29 86 views
1

我試圖將來自Excel電子表格的多個單元格的數據合併爲一個JSON編碼的字符串。我無法弄清楚如何做,下面的代碼是爲每個單元格創建一個新的JSON對象。如何區分要合併到相同JSON字符串中的單元格?將多個單元格中的數據合併爲一個JSON對象

package main 

import (
    "fmt" 
    "github.com/tealeg/xlsx" 
    "encoding/json" 

) 

func main() { 
    excelFileName := "/Users/isaacmelton/Desktop/Test_Data.xlsx" 
    xlFile, err := xlsx.OpenFile(excelFileName) 
    if err != nil { 
     fmt.Printf("Cannot parse data") 
    } 
    for _, sheet := range xlFile.Sheets { 
     for _, row := range sheet.Rows { 

      fmt.Printf("\n") 
      for x, cell := range row.Cells { 
       if x == 3 || x == 5 { 
        data := map[string]string{"d_name": cell.String(), "name": cell.String()} 
        json_data, _ := json.Marshal(data) 

        fmt.Println(string(json_data)) 
       } 
      } 
     } 
    } 
} 

運行上面的代碼,結果如下:

{"foo":"cell1","bar":"cell1"} 
{"foo":"cell2","bar":"cell2"} 

我希望這樣的事情:

{"foo":"cell1", "bar":"cell2"} 
+0

我覺得這個問題不清楚......什麼樣的結果你真的想看到什麼? – Aedolon

+0

就像這樣:{「foo」:「cell1」,「bar」:「cell2」} –

+0

foo和bar從哪裏來的?您發出的JSON具有「d_name」和「name」鍵。 – djd

回答

0

如果我正確理解你的要求,你只需要定義根元素,將細胞添加到它並編組此元素而不是單個細胞。

root := []map[string]string{} 
for x, cell := range row.Cells { 
    if x == 3 || x == 5 { 
     root = append(root, map[string]string{"d_name": cell.String(), "name": cell.String()}) 
    } 
} 
json_data, _ := json.Marshal(root) 
fmt.Println(string(json_data)) 

http://play.golang.org/p/SHnShHvW_0

0

您可以使用

a, err := row.Cells[3].String() 
b, err := row.Cells[5].String() 

像這樣的工作代碼:

package main 

import (
    "encoding/json" 
    "fmt" 

    "github.com/tealeg/xlsx" 
) 

func main() { 
    xlFile, err := xlsx.OpenFile(`Test_Data.xlsx`) 
    if err != nil { 
     panic(err) 
    } 
    for _, sheet := range xlFile.Sheets { 
     for _, row := range sheet.Rows { 
      //for x, cell := range row.Cells { 
      //if x == 3 || x == 5 { 
      a, err := row.Cells[3].String() 
      if err != nil { 
       panic(err) 
      } 
      b, err := row.Cells[5].String() 
      if err != nil { 
       panic(err) 
      } 
      data := map[string]string{"d_name": a, "name": b} 
      json_data, err := json.Marshal(data) 
      if err != nil { 
       panic(err) 
      } 
      fmt.Println(string(json_data)) 
      //} 
      //} 
     } 
    } 
} 

輸出:

{"d_name":"1000","name":"a"} 
{"d_name":"2000","name":"b"} 
{"d_name":"3000","name":"c"} 
{"d_name":"4000","name":"d"} 
{"d_name":"5000","name":"e"} 

輸入文件內容:

1 10 100 1000 10000 a 
2 20 200 2000 20000 b 
3 30 300 3000 30000 c 
4 40 400 4000 40000 d 
5 50 500 5000 50000 e 
相關問題