最近项目上需要实现用FeatureTable导出excel,实现之余记录一下。ArcGIS API for JavaScript 用的版本是4.19。
废话不多说,先查询api接口文档,developers.arcgis.com/javascript/… ,发现通过featureTable并不能获取到数据集(踩坑,查了好久发现并不可以)。
那么得通过query调用arcgis 的服务获取到数据,将数据整理后导出即可。
excel导入导出都是依赖于js-xlsx来实现的。
panjiachen.github.io/vue-element…
exportExcel () {
import('@/vendor/Export3Excel').then(excel => {
var self = this
let params = {
where: '1=1',
returnGeometry: false,
outFields: '*',
f: 'pjson'
}
// this.featureLayer.config.server_url 是arcgis服务地址
axios.get(this.featureLayer.config.server_url + '/query?', {
params: params
}).then(res => {
let list = []
// 获取数据记录
res.data.features.forEach(element => {
if (element.attributes) {
list.push(element.attributes)
}
})
let tHeaders = []
let filterVals = []
let fieldAliases = res.data.fieldAliases
// 设置标题跟映射字段
for (var key in fieldAliases) {
tHeaders.push(fieldAliases[key])
filterVals.push(key)
}
// 判断是是否是日期格式
let fields = res.data.fields
let dateArray = []
fields.forEach(element => {
if (element.type === 'esriFieldTypeDate') {
dateArray.push(element.name)
}
})
// console.log(dateArray)
const data = self.formatJson(filterVals, list, dateArray)
// console.log(data)
excel.export_json_to_excel({
header: tHeaders,
data,
filename: self.filename,
autoWidth: self.autoWidth,
bookType: self.bookType
})
})
})
},
formatJson (filterVal, jsonData, timeArray) {
return jsonData.map(v => filterVal.map(j => {
if (timeArray && timeArray.includes(j)) {
// console.log('formatJson', j, v[j])
return parseTime(v[j])
} else {
return v[j]
}
}))
},
这个方法导出是导出全部的数据