您的位置:首页 > 运维架构 > 网站架构

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

2011-06-03 16:34 316 查看
可能由于长期从事对日软件的开发,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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: