为了账号安全,请及时绑定邮箱和手机立即绑定

尝试将 html 表单数据提交到 Excel

尝试将 html 表单数据提交到 Excel

Go
长风秋雁 2022-08-15 17:37:25
我成功地编写了将html表单数据作为单个excel行提交的代码。但是在我的html表单中,我想提交多个数据,这些数据应该附加到excel的单个单元格中,但数据的第二部分应该以同一单元格中的新行开头。就像(ALT + 输入操作)。我的html代码如下。索引.html{{template "header"}}<form method="POST">    <label for="name">NAME</label>    <input type="text" id="name" name="name">    <br style="mso-data-placement:same-cell;">    <label for="gender">GENDER</label>    <input type="text" id="gender" name="gender">    <br>    <label for="age">AGE</label>    <input type="text" id="age" name="age">    <br>  <input type="submit"></form><br>我尝试使用“style=”mso-data-placement:same-cell;“,但它无济于事。我的golang代码如下。func datasubmit(w http.ResponseWriter, req *http.Request) {      nm := req.FormValue("name")      ge := req.FormValue("gender")      ag := req.FormValue("age")      var data = M{"Name": nm, "GENDER": ge, "AGE": ag}  // i have used map type M map[string]interface{}      tpl.ExecuteTemplate(w, "index.gohtml", data)      f, err := excelize.OpenFile("./Book99.xlsx")          if err != nil {          fmt.Println(err)          return         }      sheetName := f.GetSheetName(0)      fmt.Println(sheetName)      rows, err := f.GetRows(sheetName)      rlast := len(rows)      fmt.Println(rows)      fmt.Println(rlast)      f.SetCellValue(sheetName, fmt.Sprintf("A%d", rlast+1), data["Name"])      f.SetCellValue(sheetName, fmt.Sprintf("B%d", rlast+1), data["GENDER"])      f.SetCellValue(sheetName, fmt.Sprintf("C%d", rlast+1), data["AGE"])      err = f.SaveAs("./Book99.xlsx")       if err != nil {        fmt.Println(err)       }}你能指导我打破第一个单元格与多个数据从新行开始。ex jim;jam ==> jim 既在单个单元格中,又在 excel 中用新行卡住。
查看完整描述

2 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

感谢您的反馈和时间来解决我的查询。


最后,我借助以下代码实现了我的目标。它有点复杂,但它对我有用,我希望它对其他人也有帮助。



func datasubmit(w http.ResponseWriter, req *http.Request) {

    nm := req.FormValue("name")

    ge := req.FormValue("gender")

    ag := req.FormValue("age")


    sliNm := strings.Split(nm, ";") // creating slice if ";" occur then it treat as another element of slice


    var final string // again creating string to fill "\n"

    for _, v := range sliNm {

        final += v

        final = final + "\n"

    }


    fmt.Println(final)


    var data = M{"Name": final, "GENDER": ge, "AGE": ag} // data as map

    tpl.ExecuteTemplate(w, "index.gohtml", data)


    f, err := excelize.OpenFile("./Book99.xlsx")

    if err != nil {

        fmt.Println(err)

        return

    }


    sheetName := f.GetSheetName(0)

    

    // Set cell A1 to Wrapp

    style, err := f.NewStyle(&excelize.Style{

        Alignment: &excelize.Alignment{

            WrapText: true,

        },

    })

    if err != nil {

        panic(err)

    }


    fmt.Println(sheetName)

    rows, err := f.GetRows(sheetName)

    rlast := len(rows)

    fmt.Println(rows)

    fmt.Println(rlast)


    f.SetCellStyle(sheetName, fmt.Sprintf("A%d", rlast+1), fmt.Sprintf("A%d", rlast+1), style) // setting cell style for newly creating cell with every iteration

    fmt.Println(data["Name"])

    f.SetCellValue(sheetName, fmt.Sprintf("A%d", rlast+1), data["Name"])

    f.SetCellValue(sheetName, fmt.Sprintf("B%d", rlast+1), data["GENDER"])

    f.SetCellValue(sheetName, fmt.Sprintf("C%d", rlast+1), data["AGE"])


    err = f.SaveAs("./Book99.xlsx")

    if err != nil {

        fmt.Println(err)

    }

}

此代码适用于我。假设输入是 jim;jam;==>我的o / p在excel的单个单元格中如下所示。吉姆果酱


另外,是的,执行模板是没有意义的,但我创建它只是为了在网站上查看最近提交的数据。


查看完整回答
反对 回复 2022-08-15
?
慕森王

TA贡献1777条经验 获得超3个赞

如果我正确阅读了您的查询,我相信您正在询问如何将新文本行添加到Excel单元格中(您将在Excel应用程序中使用ALT + Enter执行此操作)。数据的来源似乎与您的问题无关。


在 Excel(在 Windows 上)中,单元格中的多行由换行符(字符0xA或转到中)拆分。但是,当您添加换行符时,Excel会自动将单元格设置为“换行”(如果不这样做,则换行符存在但不显示)中,这有点复杂。\n


以下是如何在Go中实现的示例;每次运行应用程序时,它都会向单元格 A1 添加一个新行。请注意,我没有更改单元格高度,因此您需要执行此操作以使额外的行可见:


func main() {

    f, err := excelize.OpenFile("./Book99.xlsx")

    if err != nil {

        panic(err)

    }

    sheetName := f.GetSheetName(0)


    // Set cell A1 to Wrap

    style, err := f.NewStyle(&excelize.Style{

        Alignment: &excelize.Alignment{

            WrapText: true,

        },

    })

    if err != nil {

        panic(err)

    }

    if err := f.SetCellStyle("Sheet1", "A1", "A1", style); err != nil {

        panic(err)

    }


    // Get cell value, add new name and save

    v, err := f.GetCellValue(sheetName, "a1")

    if err != nil {

        panic(err)

    }

    fmt.Printf("%x\n", v) // Output as hex so you can see how the line break is encoded

    err = f.SetCellValue(sheetName, "a1", v + "\n" + "Joe Bloggs")

    if err != nil {

        panic(err)

    }

    err = f.SaveAs("./Book99.xlsx")

    if err != nil {

        panic(err)

    }

}


查看完整回答
反对 回复 2022-08-15
  • 2 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信