You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: excel.go
    path of file: ./repos/yao/widgets/table
    
    the code of the file until where you have to start completion: package table

import (
	"errors"
	"fmt"
	"os"
	"path/filepath"

	"github.com/xuri/excelize/v2"
	"github.com/yaoapp/gou/fs"
	"github.com/yaoapp/kun/any"
	"github.com/yaoapp/kun/log"
	"github.com/yaoapp/kun/maps"
)

// Export Export query result to Excel
func (dsl *DSL) Export(filename string, data interface{}, page int, chunkSize int) error {

	log.Trace("[Export] %s %d %d Before: %#v", filename, page, chunkSize, data)

	rows := []maps.MapStr{}
	if values, ok := data.([]maps.MapStrAny); ok {
		for _, ro
    
func (dsl *DSL) exportSetting() ([]map[string]string, error) {
	// Validate params
	if dsl.Layout == nil {
		return nil, fmt.Errorf("the table layout does not found")
	}

	if dsl.Fields == nil || dsl.Fields.Table == nil {
		return nil, fmt.Errorf("the table fields does not found")
	}

	if dsl.Layout.Table == nil || dsl.Layout.Table.Columns == nil {
		return nil, fmt.Errorf("the columns table layout does not found")
	}

	setting := []map[string]string{}
	for _, column := range dsl.Layout.Table.Columns {

		if field, has := dsl.Fields.Table[column.Name]; has {
			bind := field.Bind
			if field.View != nil && field.View.Bind != "" {
				bind = field.View.Bind
			}
			setting = append(setting, map[string]string{"name": column.Name, "field": bind})
		}
	}

	return setting, nil
}