軟件bug,軟件緩存過多。
創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的垣曲網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
1、vb.netgrid軟件運(yùn)行服務(wù)器出現(xiàn)bug導(dǎo)致自動生成excel不保存,退出重新進(jìn)入,等待官方修復(fù)。
2、vb.netgrid軟件緩存過多導(dǎo)致自動生成excel不保存,清理軟件空間,重啟軟件。
Public Sub abc() Dim filename, inputstring As String Dim i As Integer Dim data i = 1 filename = "d:\WYKS.txt" '本列TXT文件放在D盤中 Open filename For Input Access Read As #1 Do While Not EOF(1) Line Input #1, inputstring '讀TXT文件一行 data = inputstring If i 1 Then Cells(i - 1, 1) = Mid(data, 11, 6) '截取從第11個字符后6個字符 Cells(i - 1, 2) = Mid(data, 19, 8) '截取從第19個字符后8個字符 Cells(i - 1, 3) = Mid(data, 29, 6) '截取從第29個字符后6個字符 Cells(i - 1, 4) = Mid(data, 37, 8) '截取從第37個字符后8個字符 End If i = i + 1 Loop Close #1 End Sub
使用了VB.NET開發(fā)一個訪問excel讀取數(shù)據(jù)并修改的小程序,有一些經(jīng)驗性的東西和大家共享,如果有誤還請大家指正。
大致分為這樣幾個部分來說明:
1、 準(zhǔn)備部分:
準(zhǔn)備部分我們需要添加excel library的引用到工程中:我使用office2003,它的庫文件為 Microsoft excel 11.0 object library。如果使用excel2000,那么它使用的是Microsoft excel 9.0 object library。
有需要時,我們添加Imports 命名空間。
我在這個程序中只是訪問了excel的數(shù)據(jù),不需要命名空間了哈。
2、 聲明一些對象:
這些對象并不是都需要,前面三個應(yīng)該有,后面的,你需要什么對象就聲明:
Dim excelapp As Excel.Application ‘聲明一個application對象
Dim excelworkbook As Excel.Workbook ‘聲明一個工作簿對象
Dim excelsheet As Excel.Worksheet ‘聲明一個工作表對象
等等…如:
Dim excelrange As Excel.Range ‘聲明一個范圍對象
3、 訪問一個excel文件:
excelapp = New Excel.Application
excelworkbook = excelapp.Workbooks.Open(strfile) ‘訪問到工作簿:這個strfile 是文件的路徑,我從打開文件對話框中得到的。
excelsheet = excelworkbook.Sheets.Item(1) ‘訪問到工作表:item使用索引值來得到sheet對象的引用
excelsheet.activate
我們可以得到此文件中的值:
定義一個string變量:
Dim strcellvalue as string
Strcellvalue=excelsheet.cells(1,1).value ‘得到A1單元格的內(nèi)容。
修改的時候反過來就可以了:
excelsheet.cells(1,1).value= Strcellvalue
4、 善后:
在程序的每一個退出口操作excel對象,保存或者不保存:
Excelworkbook.save
Excelworkbook.close
Excelapp=nothing
5其它:
需要注意~上面的代碼需要一些容錯機(jī)制,比如:
If Not excelworkbook Is Nothing Then 這樣的話來達(dá)到程序的正確運(yùn)行
需要判斷現(xiàn)在excel又沒有打開。如果有excel進(jìn)程正在運(yùn)行。你的代碼很可能會影響到打開的excel,像Excelworkbook.close這樣的語句雖然前面已經(jīng)很好的唯一指定了工作簿,但不能很武斷的進(jìn)行魯莽的操作,我們需要判斷現(xiàn)在excel的運(yùn)行情況。
另外,VB.NET 讀取Excel 2007的xlsx文件和讀取老的.xls文件是一樣的,都是用Oledb讀取,僅僅連接字符串不同而已。讀取xlsx 用的是Microsoft.Ace.OleDb.12.0;具體操作方法如下:
Public Shared Function GetExcelToDataTableBySheet(ByVal FileFullPath As String, ByVal SheetName As String) As DataTable
'string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + FileFullPath + ";Extended Properties='Excel 8.0; HDR=NO; IMEX=1'"; //此連接只能操作Excel2007之前(.xls)文件
Dim strConn As String = ("Provider=Microsoft.Ace.OleDb.12.0;" "data source=") + FileFullPath ";Extended Properties='Excel 12.0; HDR=NO; IMEX=1'"
'此連接可以操作.xls與.xlsx文件
Dim conn As New OleDbConnection(strConn)
conn.Open()
Dim ds As New DataSet()
Dim odda As New OleDbDataAdapter(String.Format("SELECT * FROM [{0}]", SheetName), conn)
'("select * from [Sheet1$]", conn);
odda.Fill(ds, SheetName)
conn.Close()
Return ds.Tables(0)
End Function
讀取Excel文件時,可能一個文件中會有多個Sheet,因此獲取Sheet的名稱是非常有用的。根據(jù)Excel物理路徑獲取Excel文件中所有表名的具體操作方法如下:
Public Shared Function GetExcelSheetNames(ByVal excelFile As String) As [String]()
Dim objConn As OleDbConnection = Nothing
Dim dt As System.Data.DataTable = Nothing
Try
'string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + excelFile + ";Extended Properties='Excel 8.0; HDR=NO; IMEX=1'"; //此連接只能操作Excel2007之前(.xls)文件
Dim strConn As String = ("Provider=Microsoft.Ace.OleDb.12.0;" "data source=") + excelFile ";Extended Properties='Excel 12.0; HDR=NO; IMEX=1'"
'此連接可以操作.xls與.xlsx文件
objConn = New OleDbConnection(strConn)
objConn.Open()
dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
If dt Is Nothing Then
Return Nothing
End If
Dim excelSheets As [String]() = New [String](dt.Rows.Count - 1) {}
Dim i As Integer = 0
For Each row As DataRow In dt.Rows
excelSheets(i) = row("TABLE_NAME").ToString()
i += 1
Next
Return excelSheets
Catch
Return Nothing
Finally
If objConn IsNot Nothing Then
objConn.Close()
objConn.Dispose()
End If
If dt IsNot Nothing Then
dt.Dispose()
End If
End Try
End Function