写了一个把父表和对应子表数据导出excel的方法
一共有3个表。父表:YBQuotationMain,子表YBQuotationDetail,他们之间通过 YBQuotationID关联。还有一个商品档案表YBItemInfo,它与子表通过YBItemID关联,Ftp图片列YBItemPicture里而在商品档案表里
此主题相关图片如下:2.jpg
此主题相关图片如下:3.png
此主题相关图片如下:1.jpg
excel的样式,我在下一个回复里插入
导出excel的代码:
If Tables("YBQuotationMain").Current IsNot Nothing Then
Dim cnt As Integer = 0
cnt = DataTables("YBQuotationDetail").SQLCompute("Count(*)", "YBQuotatiYBQuotationMain").Current("YBQuotationID") )
If cnt >300 Then
If MessageBox.show("产品超过300个,有可能因为你的机器内存不足而导出失败,要尝试导出吗?","提示",MessageBoxButtons.YesNo) = DialogResult.no Then
Return
End If
End If
MessageBox.show("如果导出过程中提示【连接服务器失败...】,图片没下载完整,那么再导出一次即可")
Dim st As Date = Date.Now
'---把子表全加载,我的子表数据才用动态加载,而excel导出只导出已加载的表
DataTables("YBQuotationDetail").LoadFilter = "YBQuotatiYBQuotationMain").Current("YBQuotationID")
DataTables("YBQuotationDetail").LoadTop="100 percent"
DataTables("YBQuotationDetail").LoadOver="_identify"
DataTables("YBQuotationDetail").Load(False)
'---把子表全加载,我的子表数据才用动态加载,而excel导出只导出已加载的表
'------追载表达式的关联表YBItemInfo的数据
If DataTables("YBQuotationDetail").DataRows.Count >0 Then
For Each dr As DataRow In DataTables("YBQuotationDetail").DataRows
Dim Filter As String ="YBItemID = '" & dr("YBItemID") & "'"
If DataTables("YBItemInfo").find(Filter) Is Nothing Then '如果对 应的订单明细没有加载过
DataTables("YBItemInfo").AppendLoad(Filter,False) '则追载此订单 的订单明细
End If
Next
End If
'------追载表达式的关联表YBItemInfo的数据
Dim Book As New XLS.Book(ProjectPath & "Attachments\YBQuotationOrigin.xls")
Dim now As String = Format(Date.now, "yyyyMMddHHmmss")
Dim fl As String = ProjectPath & "Reports\Invoice原图" & now & ".xls"
YBPicFtp.Close
Try
Book.Build() '生成细节区
Dim Sheet As XLS.Sheet = Book.Sheets(0)
Sheet.Rows.Frozen = 11
Book.Save(fl) '保存工作簿
'---进度条
StatusBar.ProgressBar.Value = StatusBar.ProgressBar.Maximum
StatusBar.Message1 ="导出成功"
StatusBar.Message2= StatusBar.ProgressBar.Value & "/" & StatusBar.ProgressBar.Maximum
StatusBar.Refresh
'---进度条
MessageBox.Show("耗时: " & (Date.Now - st).TotalSeconds & "秒") '计算并显示执行代码所花费的秒数
Dim Proc As New Process '打开工作簿
Proc.File = fl
Proc.Start()
Proc.File = ProjectPath & "Reports"
Proc.Start()
Catch ex As Exception
StatusBar.Message1 ="导出失败"
StatusBar.Refresh
MessageBox.Show("囧...导出的图片太多或者图片太大,而你机器内存太少不足以支撑,所以导出失败!" & vbcrlf & vbcrlf & "选压缩导出,或者少选点产品把","提示",MessageBoxButtons.OK)
End Try
YBPicFtp.Close
'----变回动态加载----
Dim dln As WinForm.NumericComboBox = e.Form.Controls("NumericComboBox_DetailLoadNum")
DataTables("YBQuotationDetail").LoadTop= dln.Value
DataTables("YBQuotationDetail").Loadpage =0
DataTables("YBQuotationDetail").Load(False)
'----变回动态加载----
Else MessageBox.show("请先选择订单")
End If
有时候50张图片,就会有2张下载不了,有这个提示,有时候重新再导出能解决,有时候就算重启狐表,还是下载不了,只能子表一行行点击,把它的图片都对应加载过,那导出时就不需要下载,就直接成功。请问有好的解决方法吗?
我的服务器是阿里云的,双核4G内存 I/O优化 固态硬盘的,用的是FileZilla Server Interface
[此贴子已经被作者于2016/11/8 14:35:28编辑过]