2013-03-09 86 views
0

我卡在這裏,我想從5個文本框中的數據插入到現有的excel文件中。我發現了代碼,但是按行插入。我有一個代碼找到最後一個非空行,並從那一行我想移動到下一行並在那裏插入數據,例如最後一行是A2,我想插入新的數據到A3,B3,C3,D3 ,E3。如何使用vb.net插入數據從文本框到excel?

我無法爲此獲得正確的循環。

Dim lRow As Long = 0 
    Call OpenExcelFile("C:\Users\PB\Desktop\BookRecords.xlsx", 1) 

    With xlWorkSheet 
     If EXL.WorksheetFunction.CountA(.Cells) <> 0 Then 
      lRow = .Cells.Find(What:="*", _ 
          After:=.Range("A2"), _ 
          LookAt:=Excel.XlLookAt.xlPart, _ 
          LookIn:=Excel.XlFindLookIn.xlFormulas, _ 
          SearchOrder:=Excel.XlSearchOrder.xlByRows, _ 
          SearchDirection:=Excel.XlSearchDirection.xlPrevious, _ 
          MatchCase:=False).Row 
     Else 
      lRow = 1 


     End If 
     lRow += 1 

    End With 
    MessageBox.Show("The last row in Sheet1 which has data is " & lRow) 
    Dim j As Integer 
    j = 3 
    For i As Integer = j To 8 
     xlWorkSheet.Range(xlWorkSheet.Cells(lRow + 1, j).item).Value = txtTitle.Text 
     xlWorkSheet.Range(xlWorkSheet.Cells(lRow + 1, j).item).Value = txtAuthor.Text 
     xlWorkSheet.Range(xlWorkSheet.Cells(lRow + 1, j).item).Value = txtEdition.Text 
     xlWorkSheet.Range(xlWorkSheet.Cells(lRow + 1, j).item).Value = txtPublisher.Text 
     xlWorkSheet.Range(xlWorkSheet.Cells(lRow + 1, j).item).Value = txtISBN.Text 
    Next 
    j += 1 

    Call SaveAndCloseExcelSub() 
+2

能否請您詳細闡述,只是在你想要它看起來如何的問題中包含Excel Mockup屏幕截圖。我不知道你的意思是「列的更改取決於最後一行檢索」 – 2013-03-09 06:10:49

+0

@JeremyThompson我的意思是列是一個遞增和行是原樣。例如,A3是下一行,然後是B3,然後是C3,然後是D3,E3是否是A3,A4,A5,A6,A7 – user2107624 2013-03-09 06:18:29

+0

您想用'for i'循環實現什麼?爲什麼循環後增加'j'?注意 - 當Excel表示「A2」時,它使用「列,行」順序。但是,當您索引單元格時,它按「行,列」順序排列。這真是令人困惑 - 也可能是我們似乎在互相交談的原因。 – Floris 2013-03-09 06:27:23

回答

2

這是否幫助:

Dim j As Integer 
j = 3 
For i As Integer = j To 8 
MsgBox("Cell column: " & ColumnNumberToName(i)) 
Next 

代碼爲數字到Excel列名(AZ,AA等)轉換:

Public Shared Function ColumnNumberToName(columnNumber As Int32) As String 
Dim dividend As Int32 = columnNumber 
Dim columnName As [String] = [String].Empty 
Dim modulo As Int32 
While dividend > 0 
    modulo = (dividend - 1) Mod 26 
    columnName = Convert.ToChar(65 + modulo).ToString() + columnName 
    dividend = DirectCast(((dividend - modulo)/26), Int32) 
End While 

Return columnName 
End Function 

Public Shared Function ColumnNameToNumber(columnName As [String]) As Int32 
If [String].IsNullOrEmpty(columnName) Then 
    Throw New ArgumentNullException("columnName") 
End If 
Dim characters As Char() = columnName.ToUpperInvariant().ToCharArray() 
Dim sum As Int32 = 0 
Dim i As Int32 = 0 
While i < characters.Length 
    sum *= 26 
    sum += (characters(i) - "A"C + 1) 
    System.Math.Max(System.Threading.Interlocked.Increment(i),i - 1) 
End While 
Return sum 
End Function 
+0

只會在具有指定列的單元格上寫入我想要執行的操作是根據檢索到的最後一行更改列。 – user2107624 2013-03-09 06:04:56

+0

也回到你身邊。 – Floris 2013-03-09 06:07:44

+0

傑里米 - 你剛剛添加的這些功能提醒了我今天早些時候給出的答案:http://stackoverflow.com/questions/15260075/converting-excel-column-letters-to-corresponding-column-numbers/15260136#15260136 – Floris 2013-03-09 06:32:32

2

正因爲如此,所有你的價值觀正在寫入同一個單元格;然後你下來連續做一遍。細胞的地址爲(行,列) - 所以你需要改變這樣的代碼:

Dim j As Integer 
j = 3 
For i As Integer = j To 8 
    xlWorkSheet.Cells(lRow + i, 1).Value = txtTitle.Text 
    xlWorkSheet.Cells(lRow + i, 2).Value = txtAuthor.Text 
    xlWorkSheet.Cells(lRow + i, 3).Value = txtEdition.Text 
    xlWorkSheet.Cells(lRow + i, 4).Value = txtPublisher.Text 
    xlWorkSheet.Cells(lRow + i, 5).Value = txtISBN.Text 
Next 

不知道,如果你需要啓動i = 3如果添加lRow到它,但我敢肯定,你可以工作那個。

如果你想要的順序顛倒過來,這樣做(這個例子只拷貝一個大量的文字......我開始懷疑有沒有必要環路)

dim i as Integer 
i = 1; ' if you want column A 
With xlWorkSheet 
    .Cells(lRow , i).Value = txtTitle.Text 
    .Cells(lRow + 1, i).Value = txtAuthor.Text 
    .Cells(lRow + 2, i).Value = txtEdition.Text 
    .Cells(lRow + 3, i).value = txtPublisher.Text 
    .Cells(lRow + 4, i).Value = txtISBN.Text 
End With 
+0

+1爲體育道德,jinks! – 2013-03-09 06:04:52

+0

@JeremyThompson - 絕對穿越網空......雖然謝謝。 – Floris 2013-03-09 06:06:43

+0

與@JeremyThompson相同我不想指定列,因爲它總是隨檢索的最後一行而變化。如何編碼該列是一個遞增和行是一樣的?謝謝 – user2107624 2013-03-09 06:11:27

相關問題