Foxtable(狐表)用户栏目专家坐堂 → [求助]ftp较多图片导出excel时经常连接服务器失败


  共有2751人关注过本帖平板打印复制链接

主题:[求助]ftp较多图片导出excel时经常连接服务器失败

帅哥哟,离线,有人找我吗?
chen3728060
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:388 积分:5098 威望:0 精华:0 注册:2013/11/2 0:01:00
[求助]ftp较多图片导出excel时经常连接服务器失败  发帖心情 Post By:2016/11/8 14:29:00 [只看该作者]

写了一个把父表和对应子表数据导出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编辑过]

 回到顶部
总数 12 1 2 下一页