Foxtable(狐表)用户栏目专家坐堂 → 处理EXCEL


  共有8238人关注过本帖树形打印复制链接

主题:处理EXCEL

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


加好友 发短信
等级:五尾狐 帖子:1107 积分:10568 威望:0 精华:0 注册:2014/2/19 16:32:00
处理EXCEL  发帖心情 Post By:2021/5/7 15:05:00 [只看该作者]

跟踪代码发现标红处报错:从字符串“”到类型“Double”的转换无效。输入字符串的格式不正确。

Dim st As Date = Date.Now
Dim txt4 As WinForm.TextBox = Forms("翻译器").Controls("TextBox4")
Dim cm As WinForm.ComboBox = Forms("翻译器").Controls("ComboBox1")
Dim lbl As WinForm.Label = Forms("翻译器").Controls("Label6")
Dim lbl8 As WinForm.Label = Forms("翻译器").Controls("Label8")
Dim lbl9 As WinForm.Label = Forms("翻译器").Controls("Label9")
Dim lbl11 As WinForm.Label = Forms("翻译器").Controls("Label11")
Dim Numcb1 As WinForm.NumericComboBox = Forms("翻译器").Controls("NumComBox1")
Dim Numcb2 As WinForm.NumericComboBox = Forms("翻译器").Controls("NumComBox2")
Dim path As String = args(0)
Dim file As Object
Dim app As new MSExcel.Application
'app.visible = True
'//准备字典信息
'try
Dim dic As new Dictionary(of String,String)
Dim dicfile As String =  Forms("翻译器").Controls("TextBox2").value

Dim Book As New XLS.Book(dicfile) '定义一个Excel工作簿
Dim Sheet As XLS.Sheet = Book.Sheets(0) '引用工作簿的第一个工作表

For i As Integer = 0 To Sheet.Rows.Count-1
    If dic.ContainsKey(Sheet(i, 0).Text.ToLower.Replace(" ","").Replace(chr(10), "").Replace(chr(13), "")) = False Then
        dic.add(Sheet(i, 0).Text.ToLower.Replace(" ","").Replace(chr(10), "").Replace(chr(13), ""),Sheet(i, 1).Text)
    End If
Next

'--------------------

'//开始翻译
For Each file In FileSys.GetFiles(path)
    'try
    Dim excelcol As Integer
    Dim excelrows As Integer
    If file.EndsWith(".xls") OrElse file.EndsWith(".XLS") OrElse file.EndsWith(".xlsx") OrElse file.EndsWith(".XLSX")   Then
        If file.EndsWith(".xls") OrElse file.EndsWith(".XLS")  Then
            
            excelcol = 256
            excelrows  =65536
        Else
            excelcol = 16384
            excelrows  =1048576
        End If
        Dim wb=app.WorkBooks.open(file)
        For k As Integer=1 To wb.worksheets.Count
            output.show(1)
            If Wb.WorkSheets(k).Visible <> 0 Then        '如果sheet表为不隐藏时处理(0隐藏,-1为不隐藏
            output.show(2)
                Dim Ws As MSExcel.WorkSheet=Wb.WorkSheets(k)
            output.show(3)
                If Numcb1.Text = Nothing And Numcb2.Text = Nothing Then
                    RowsMax = 0
                    ColsMax = ws.UsedRange.columns.count

                    '获取最大行
                    For i As Integer = 1 To ColsMax
                        Dim r = ws.cells(excelrows,i).End(MsExcel.XlDirection.xlUp).Row
                        If r > RowsMax Then
                            RowsMax = r
                        End If
                    Next
                    'Output.Show("rowsmax =" & rowsmax )
                    '获取最大列
                    For i As Integer = 1 To RowsMax
                        Dim r = ws.cells(i,excelcol).End(MsExcel.XlDirection.xlToLeft).Column
                        If r > ColsMax Then
                            ColsMax = r
                        End If
                    Next
                Else
                    RowsMax = Numcb1.Value
                    ColsMax = Numcb2.Value
output.show(RowsMax & " " & ColsMax)
                End If
                
                Dim  rg As MSExcel.Range =  Ws.Range(Ws.Cells(1,1), Ws.Cells(RowsMax,ColsMax))
output.show(4)
                If rg.Count = 1 And rg(1).Value = "" Then 'If rg.Count = 1 And rg(1).Value Is Nothing Then
                    Continue For
                End If
                Dim ary = rg.value
output.show(5)

                For i As Integer=1 To RowsMax
                    'If rg.Rows(i).height <> 0 Then
                    For j As Integer = 1 To ColsMax
                        'If rg.Columns(j).width <> 0 Then
                        If ary(i, j) <> Nothing  AndAlso Typeof ary(i,j) Is String AndAlso dic.ContainsKey(ary(i,j).ToLower.Replace(" ","").Replace(chr(10), "").Replace(chr(13), "")) Then
                            lbl11.text= "Sheet名称:" & ws.name
output.show(6)
                            
                         rg(i, j).Value= dic(ary(i,j).ToLower.Replace(" ","").Replace(chr(10), "").Replace(chr(13), ""))
output.show("Sheet名称:" & ws.name & rg(i,j).value)                            
                            
                        End If
                        'End If
                    Next
                    'End If
                Next
            End If '不处理隐藏sheet
        Next
        
        Dim txt1 As WinForm.TextBox = Forms("翻译器").Controls("TextBox3")
        txt1.text = file & vbcrlf & txt1.text & vbcrlf
        Application.DoEvents()
output.show("暂停")
        FileCount=FileCount+1
        lbl.Text="共处理" & FileCount & "个文件"
        wb.Save
        app.quit
    End If
    
Next

For Each p As String In FileSys.GetDirectories(path)
    Functions.Execute("G纯译文_翻译隐藏行列", p)
Next
lbl9.Text="计算结束, 耗时: " & (Date.Now - st).TotalSeconds & "秒"

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107135 积分:544918 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/7 15:29:00 [只看该作者]

应该不是红色代码的问题,Value 是对象,应该使用Is Nothing判断

If rg.Count = 1 And rg(1).Value Is Nothing Then

 回到顶部
帅哥哟,离线,有人找我吗?
wh420
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1107 积分:10568 威望:0 精华:0 注册:2014/2/19 16:32:00
  发帖心情 Post By:2021/5/7 15:48:00 [只看该作者]

果然是那的问题,请问老师:如何忽略那个错误而让程序能继续执行呢?因为EXCEL情况太复杂

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107135 积分:544918 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/7 15:56:00 [只看该作者]


 回到顶部
帅哥哟,离线,有人找我吗?
wh420
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1107 积分:10568 威望:0 精华:0 注册:2014/2/19 16:32:00
  发帖心情 Post By:2021/5/7 16:15:00 [只看该作者]

1、rg(1).Value Is Nothing 如果对象是数字、时间等用IS NOTHING判断会准确吗?
2、用ISNULL来判断EXCEL单元格是否为空是否准确?


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107135 积分:544918 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/7 16:23:00 [只看该作者]

1、Value是对象类型,也就是object,数字、时间等一样可以用IS NOTHING判断

2、没有ISNULL这种用法

 回到顶部
帅哥哟,离线,有人找我吗?
wh420
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1107 积分:10568 威望:0 精华:0 注册:2014/2/19 16:32:00
  发帖心情 Post By:2021/5/7 16:33:00 [只看该作者]

收到,谢谢。

 回到顶部
帅哥哟,离线,有人找我吗?
wh420
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1107 积分:10568 威望:0 精华:0 注册:2014/2/19 16:32:00
  发帖心情 Post By:2021/5/7 17:32:00 [只看该作者]

lbl11.text= "Sheet名称:" & ws.name & vbcrlf  & ary(i,j) & rg(i,j).value
这种写法把每个单元格内容实时输出到LABEL标签中,是否会影响代码执行效率?

因为我在测试的时候同样的文档每次结果都不太一样,所以有点晕。


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107135 积分:544918 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/7 17:37:00 [只看该作者]

有没有影响要看量,单元格多遍历起来肯定有效率问题。

至于结果都不太一样请截图详细说明一下

 回到顶部
帅哥哟,离线,有人找我吗?
wh420
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1107 积分:10568 威望:0 精华:0 注册:2014/2/19 16:32:00
  发帖心情 Post By:2021/5/7 18:07:00 [只看该作者]

那有什么办法在不影响效率的情况下还能看到代码执行的进度呢?麻烦老师给个思路

 回到顶部
总数 108 1 2 3 4 5 6 7 8 9 10 下一页 ..11