• 一个网站的诞生 MagicDict开发总结7 [Excel 是我的好朋友]


    可能由于长期从事对日软件的开发,Excel不知不觉已经成为开发工作的一个不可或缺的软件。从某种意义上说,Office等于Excel了。

    在整个网站的开发中,数据的整理基本上是Excel表格为基础的,庞大的数据放在Excel里面进行编辑。对于一些繁琐的机械化的操作,则交给VBA了。但是由于VBA的种种限制,一些很复杂的操作最后还是落到了.NET身上,使用.NET操作Excel。

    这里就分享一些Excel的小技巧和注意点:

    第一:对于Unicode字符的处理。

            由于VBA的代码不支持Unicode,所以,当你在VBA的代码里面写上日语字符的时候,他们会变成 ? 【日语操作系统的话,则不会。。。】这个时候最常用的一个方法是,你可以定义一个字符变量,然后,把你想使用的Unicode的值放在某个Excel的单元格里面,然后在程序里面把这个单元格的值赋给这个变量,这样你就可以使用那个Unicode的文字列了。

    更改前 

        IF  A = "???" THEN

    更改后


        Dim strA as String 

        strA 
    = Cells(1,1).Text

        
    If A = strA THEN

    第二:

         由于Excel速度不是很快,请一定使用 Application.Status 来定期显示你的工作进度。例如你要处理10W行记录,你应该每 5000行显示一下进度。最好每5000行操作后,保存一下结果。


         If RowCount Mod 5000 = 0 then
             Application.StatusBar 
    = "Process:" & RowCount
         
    End IF

     第三:

           XLS一张表格最多可以放65535行,Excel2007开始支持一张表格放10W行数据。.xlsx的文件可以使用WPS打开,不过,最多还是只能显示65535行,WPS不给力啊。

    由于VBA的限制,有时候一些复杂操作,还是要交给NET来做的。。。使用.NET来控制Excel:

    操作方法很简单

    1.建立一个Excel对象,打开你想操作的文件

            objExcel = CreateObject("Excel.Application")
            
    'Check The Chinese is Exist in Sentence
            objExcel.Workbooks.Open(XlsFileName)
            objExcel.Visible 
    = False

     2.为所欲为的操作Excel,最后关闭

           Dim RowCount As Integer
            
    Dim strWord As String = String.Empty
            objExcel.WorkBooks(
    1).Activate()
            objExcel.WorkBooks(
    1).worksheets(1).Select()
            
    With objExcel.WorkBooks(1).worksheets(1)
                RowCount 
    = 2
                
    Do While .Cells(RowCount, 2).Text <> ""
                    
    If RowCount = 351 Then
                        Debug.Assert(
    True)
                    
    End If
                    
    If .Cells(RowCount, 4).Text <> "" Then
                        strWord 
    = .Cells(RowCount, 4).Text
                        strWord 
    = StrConv(strWord, VbStrConv.Hiragana, 1041)
                        
    If OnlyKana(strWord) Then
                            .Cells(RowCount, 
    4).value = ""
                            .Cells(RowCount, 
    5).value = strWord
                        
    End If
                    
    End If
                    RowCount 
    = RowCount + 1
                
    Loop
            
    End With
            objExcel.Workbooks.Close()

     3.上面这些操作地球人都知道。但是,有一个objExcel对象的释放问题,请一定要记住:

         A.在objExcel使用完毕后,如果不回收垃圾的话,后台进程里面会有一个 EXCEL 的进程。

         B.垃圾回收的语句和创建objExcel的语句不能放在一个方法里面。【垃圾回收无法回收同一个方法里面的对象】

        Private Sub cmdCheckData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCheckData.Click
            CheckData()
            objExcel 
    = Nothing
            GC.Collect()
        
    End Sub

     就像上面那样,一定要在CheckData里面创建objExcel对象,然后在GC.Collect()才能正确回收。。。

    自制的操作Excel的数据整理工具


     网站第二阶段研发开始了,懂日语的童鞋,能和我一起做吗?

    有兴趣的写信给我 root#magicdict.com   [convert # to @ ]

    或者加MSN mynightelfplayer@hotmail.com

    网站地址 http://www.magicdict.com/

  • 相关阅读:
    luogu P1396 营救
    luogu P2009 跑步
    2017 9 22
    2017 9 22 模拟赛T2
    2017 9 21
    luogu P1433 吃奶酪
    luogu p1867【Mc生存】经验值
    luogu p1387 最大正方形
    单例模式1
    Java 设计模式
  • 原文地址:https://www.cnblogs.com/TextEditor/p/2072043.html
Copyright © 2020-2023  润新知