一个网站的诞生- 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的数据整理工具

一个网站的诞生- MagicDict开发总结7 [Excel 是我的好朋友]_第1张图片

 

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

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

或者加MSN [email protected]

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

 

你可能感兴趣的:(一个网站的诞生- MagicDict开发总结7 [Excel 是我的好朋友])