为了加快向Excel写入值,在VB.Net中是否可以将一个数组写入一行而不是一个值到单元格?
我尝试过几种方法,它可以不写入任何内容,也可以仅写入数组的第一个值。
非常感谢任何帮助。
感谢。
Imports Excel = Microsoft.Office.Interop.Excel
...
Dim Array(2) As String
Array(1) = "Hello"
Array(2) = "World"
...
' Tried several ways one at a time...
objSheet.Cells("C5:C6") = Array
objSheet.Cells("C5:C6").Value = Array
objSheet.Range("C5:C6").Value = Array
objSheet.Range("C5").Value = Array
在第一个答案之后,这是修改后的代码
Dim Array(2, 0) As String
Array(0, 0) = "Hello"
Array(1, 0) = "World"
Array(2, 0) = "One"
...
' Test 1
objSheet.Cells("C5:C6").Value = Array 'I get Invalid Parameter (Exception HRESULT : 0x80070057 (E_INVALIDARG))
' Test 2
objxlRange = objSheet.Range("C5:C7") ' Writes Array content as a column (Vertically)
objxlRange.Value = Array
' Test 3
objxlRange = objSheet.Range("C5:E5") ' Writes only first entry 'Hello' in each cell
objxlRange.Value = Array
如何将数组写入行(水平)?
由于
修改
好的,谢谢,现在可以了!
以下是所有人分享的最终工作代码!
Imports Excel = Microsoft.Office.Interop.Excel
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' Create an Excel file and write ArrayRow as a Row and ArrayCol as a Column
Dim objApp As Excel.Application
Dim objBook As Excel._Workbook
Dim objBooks As Excel.Workbooks
Dim objSheets As Excel.Sheets
Dim objSheet As Excel._Worksheet
Dim Rng As Excel.Range
Dim StartRow, StartCol
' Array as a Row
Dim ArrayRow(0, 3) As String
ArrayRow(0, 0) = "This"
ArrayRow(0, 1) = "is"
ArrayRow(0, 2) = "a"
ArrayRow(0, 3) = "Row"
' Array as a Column
Dim ArrayCol(3, 0) As String
ArrayCol(0, 0) = "Now"
ArrayCol(1, 0) = "it's"
ArrayCol(2, 0) = "a"
ArrayCol(3, 0) = "Column"
' New instance of Excel and start a new workbook.
objApp = New Excel.Application()
objBooks = objApp.Workbooks
objBook = objBooks.Add
objSheets = objBook.Worksheets
objSheet = objSheets(1)
'Write Array as a Row
StartRow = 1
StartCol = 1
With objSheet
Rng = .Range(.Cells(StartRow, StartCol), _
.Cells(UBound(ArrayRow, 1) - LBound(ArrayRow, 1) + StartRow, _
UBound(ArrayRow, 2) - LBound(ArrayRow, 2) + StartCol))
End With
Rng.Value = ArrayRow ' Row
'Write Array as a Column
StartRow = 3
StartCol = 1
With objSheet
Rng = .Range(.Cells(StartRow, StartCol), _
.Cells(UBound(ArrayCol, 1) - LBound(ArrayCol, 1) + StartRow, _
UBound(ArrayCol, 2) - LBound(ArrayCol, 2) + StartCol))
End With
Rng.Value = ArrayCol ' Column
' Save
objBook.SaveAs("C:\Excel_Range_Test.xls", FileFormat:=56)
objBook.Close()
End Sub
End Class
答案 0 :(得分:5)
已经有一段时间了,但我认为你必须使用多维数组才能做到这一点。
所以,像这样(记住,数组是基于0的):
Dim Array(1, 0) As String
Array(0, 0) = "Hello"
Array(1, 0) = "World"
objSheet.Range("C5:C6").Value = Array
要将其作为行而不是列,请翻转数组的尺寸。
Dim ArrayRow(0, 1) As String
ArrayRow(0, 0) = "Goodnight"
ArrayRow(0, 1) = "Moon"
objSheet.Range("C1:D1").Value = ArrayRow