一个网站的诞生- MagicDict开发总结7 [Excel 是我的好朋友]
可能由于长期从事对日软件的开发,Excel不知不觉已经成为开发工作的一个不可或缺的软件。从某种意义上说,Office等于Excel了。
在整个网站的开发中,数据的整理基本上是Excel表格为基础的,庞大的数据放在Excel里面进行编辑。对于一些繁琐的机械化的操作,则交给VBA了。但是由于VBA的种种限制,一些很复杂的操作最后还是落到了.NET身上,使用.NET操作Excel。
这里就分享一些Excel的小技巧和注意点:
第一:对于Unicode字符的处理。
由于VBA的代码不支持Unicode,所以,当你在VBA的代码里面写上日语字符的时候,他们会变成 ? 【日语操作系统的话,则不会。。。】这个时候最常用的一个方法是,你可以定义一个字符变量,然后,把你想使用的Unicode的值放在某个Excel的单元格里面,然后在程序里面把这个单元格的值赋给这个变量,这样你就可以使用那个Unicode的文字列了。
更改前
IF A = "???" THEN
更改后
strA = Cells(1,1).Text
If A = strA THEN
第二:
由于Excel速度不是很快,请一定使用 Application.Status 来定期显示你的工作进度。例如你要处理10W行记录,你应该每 5000行显示一下进度。最好每5000行操作后,保存一下结果。
Application.StatusBar = "Process:" & RowCount
End IF
第三:
XLS一张表格最多可以放65535行,Excel2007开始支持一张表格放10W行数据。.xlsx的文件可以使用WPS打开,不过,最多还是只能显示65535行,WPS不给力啊。
由于VBA的限制,有时候一些复杂操作,还是要交给NET来做的。。。使用.NET来控制Excel:
操作方法很简单
1.建立一个Excel对象,打开你想操作的文件
'Check The Chinese is Exist in Sentence
objExcel.Workbooks.Open(XlsFileName)
objExcel.Visible = False
2.为所欲为的操作Excel,最后关闭
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的语句不能放在一个方法里面。【垃圾回收无法回收同一个方法里面的对象】
CheckData()
objExcel = Nothing
GC.Collect()
End Sub
就像上面那样,一定要在CheckData里面创建objExcel对象,然后在GC.Collect()才能正确回收。。。
自制的操作Excel的数据整理工具
网站第二阶段研发开始了,懂日语的童鞋,能和我一起做吗?
有兴趣的写信给我 root#magicdict.com [convert # to @ ]
或者加MSN mynightelfplayer@hotmail.com