76 lines
1.8 KiB
Go
76 lines
1.8 KiB
Go
package model
|
||
|
||
import (
|
||
"strconv"
|
||
"strings"
|
||
|
||
excelize "github.com/xuri/excelize/v2"
|
||
)
|
||
|
||
type MTParseT struct {
|
||
QuestionNumber int `json:"question_number"`
|
||
QuestionCount int `json:"questions_count"`
|
||
ContentQuestion string `json:"content_question"`
|
||
Answers []AnswerT `json:"answers"`
|
||
}
|
||
|
||
type AnswerT struct {
|
||
Title string `json:"title"`
|
||
Correct bool `json:"correct"`
|
||
}
|
||
|
||
func (data *MTType) Parse() MTParseT {
|
||
var ret MTParseT
|
||
|
||
ret.QuestionNumber = data.QuestionNumber
|
||
ret.QuestionCount = data.QuestionCount
|
||
ret.ContentQuestion = data.CurrentQuestion.Content
|
||
answers := strings.Split(data.ValidAnswers, ",")
|
||
|
||
for _, d := range data.CurrentAnswers {
|
||
var a AnswerT
|
||
a.Title = d.Title
|
||
for _, as := range answers {
|
||
if d.Id.String() == as {
|
||
a.Correct = true
|
||
}
|
||
}
|
||
ret.Answers = append(ret.Answers, a)
|
||
}
|
||
return ret
|
||
}
|
||
|
||
func SaveToExel(filename string, data *[]MTParseT) error {
|
||
f := excelize.NewFile()
|
||
defer func() {
|
||
if err := f.Close(); err != nil {
|
||
return
|
||
}
|
||
}()
|
||
// Create a new sheet.
|
||
f.SetCellValue("Sheet1", "A2", "№ п/п")
|
||
f.SetCellValue("Sheet1", "B2", "ВОПРОСЫ")
|
||
f.SetCellValue("Sheet1", "C2", "Варианты ответа")
|
||
f.SetCellValue("Sheet1", "D2", "Результат")
|
||
i := 3
|
||
for _, d := range *data {
|
||
f.SetCellValue("Sheet1", "A"+strconv.Itoa(i), d.QuestionNumber)
|
||
f.SetCellValue("Sheet1", "B"+strconv.Itoa(i), d.ContentQuestion)
|
||
for _, a := range d.Answers {
|
||
f.SetCellValue("Sheet1", "C"+strconv.Itoa(i), a.Title)
|
||
if a.Correct {
|
||
f.SetCellValue("Sheet1", "D"+strconv.Itoa(i), "ПРАВИЛЬНЫЙ ОТВЕТ")
|
||
} else {
|
||
f.SetCellValue("Sheet1", "D"+strconv.Itoa(i), "Ответ не верный")
|
||
}
|
||
i++
|
||
}
|
||
i++
|
||
}
|
||
// Save spreadsheet by the given path.
|
||
if err := f.SaveAs(filename); err != nil {
|
||
return err
|
||
}
|
||
return nil
|
||
}
|