前段js代码
({
button4: {
text: '{{text}}',
//系统自动匹配标题
visible: true,
disabled: true,
click: function() { //按钮单击事件
e.form.showloading("正在导出《文书名表名窗体id对应表》数据,请稍后!");
$.post("form527_excel1.Ajax", {
guid: e.form.guid,
},
function(res) {
var a = document.createElement("a");
a.setAttribute("href", myurl + res);
a.setAttribute("target", "打印文书");
document.body.appendChild(a);
a.click();
a.remove();
e.form.closeloading();
})
}
}
})
后端导出代码:
Public Sub form527_excel1_Ajax(rq as Request)
Dim e As RequestEventArgs = rq.e
Dim cmd As SQL Co mmand = rq.cmd
cmd.CommandText = "sel ect * from 文书名表名窗体id对应表 "
Dim dt As DataTable = cmd.ExecuteReader()
Dim nms() As String = {"措施类别","文书名","文书简称","对应表名","窗体id","文书条款"} '要导出的列名
Dim caps() As String = {"措施类别","文书名","文书简称","对应表名","窗体id","文书条款"} '对应的列标题
Dim szs() As Integer = {100,200,80,200,80,820} '对应的列宽
Dim Book As New XLS.Book '定义一个Excel工作簿
Dim Sheet As XLS.Sheet = Book.Sheets(0) '引用工作簿的第一个工作表
Dim st As XLS.Style = Book.NewStyle '日期列的显示格式
st.Format = "yyyy-MM-dd"
For c As Integer = 0 To nms.length -1
Sheet(0, c).Value = caps(c) '指定列标题
Sheet.Cols(c).Width = szs(c) '指定列宽
If dt.dataCols(nms(c)).IsDate Then '如果是日期列
Sheet.Cols(c).Style = st '设置显示格式
End If
Next
For r As Integer = 0 To dt.dataRows.Count - 1 '填入数据
For c As Integer = 0 To nms.length -1
Sheet(r +1, c).Value = dt.datarows(r)(nms(c))
Next
Next
Book.Save(ProjectPath & "\Reports\文书名表名窗体id对应表.xls")
e.Writestring("\Reports\文书名表名窗体id对应表.xls")
End Sub
现在怎么在页面的导入信息按钮中导入刚刚导出的这个表的数据到数据库表中呢?
当前代码:在bs端不能操作,只能在部署服务的服务器端点击才会有操作,怎么变通实现在bs端可以直接就刚刚下载的文件选择后将数据导入到数据库表中呢?
Public Sub form527_excel2_Ajax(rq as Request)
Dim dlg As New OpenFileDialog
dlg.Filter = "excel文件|*.xls"
dlg.MultiSelect = True '允许选择多个文件
If dlg.ShowDialog =DialogResult.OK Then
For Each fl As String In dlg.FileNames
DataTables("文书名表名窗体id对应表").DeleteFor("")
Dim mg As New Merger
mg.SourcePath = fl
mg.Format = "excel" '指定格式
mg.Fields= "措施类别,文书名,文书简称,对应表名,窗体id,文书条款"
mg.SourceTableName = "sheet1$"
mg.DataTableName = "文书名表名窗体id对应表"
mg.Merge()
DataTables("文书名表名窗体id对应表").save
Next
End If
End Sub
以下是页面中js上传数据到页面表的方法 怎么变通为直接上传到数据库表呢?
({
button6: {
text: '{{text}}', //系统自动匹配标题
visible:false,
click: function () { //按钮单击事件
e.form.loadexcel(function(data){
var rows = data[0];//获取第一个sheet数据
var bbrows = e.form.table1.rows;
let newrows = [];
for(var i in rows){
let b = false;
// console.log(rows[i].巡察对象)
for(var j in bbrows){
// &&表示并且 ||表示或
if(rows[i].措施类别 == bbrows[j].措施类别&&rows[i].文书名称 == bbrows[j].文书名称){
b = true;
}
}
if(b == false){
newrows.push(rows[i])
}
}
// console.log(newrows)
for(var j1 in newrows){
console.log(newrows[j1])
e.form.table1.addnew(newrows[j1]);
}
e.form.table1.showrows=[];
for(var i =0;i<newrows.length-1;i++){
e.form.table1.showrows.push(newrows[i]);
}
});
},
formatExcelDate(numb, format) {
const time = new Date((numb - 1) * 24 * 3600000 + 1);
time.setYear(time.getFullYear() - 70);
time.setHours(time.getHours() - 8);
const year = time.getFullYear() + '';
const month = time.getMonth() + 1 + '';
const date = time.getDate() - 1 + '';
const hours = time.getHours().toLocaleString();
const minutes = time.getMinutes();
if (format && format.length === 1) {
return year + format + month + format + date + ' ' + hours + ':' + minutes;
}
return year + (month < 10 ? '0' + month : month) + (date < 10 ? '0' + date : date);
}
}
})
[此贴子已经被作者于2022/9/29 22:02:09编辑过]