这是我用来创建多张Excel文件的代码。其创建成功。但是,我希望能够使用每个工作表。我是否必须声明每张纸,或者有其他方法可以做到这一点。如果是的话,如何申报?
Dim fileTest As String = "C:\Temp\ExcelTest\test.xlsx"
If File.Exists(fileTest) Then
File.Delete(fileTest)
End If
Dim oExcel As Object
oExcel = CreateObject("Excel.Application")
Dim oBook As Excel.Workbook
Dim oSheet As Excel.Worksheet
oBook = oExcel.Workbooks.Add
If oExcel.Application.Sheets.Count() < 1 Then
oSheet = CType(oBook.Worksheets.Add(), Excel.Worksheet)
Else
oSheet = oExcel.Worksheets(1)
End If
oSheet.Name = "Requisition_Vendors"
oSheet.Range("A1").Value = "RQNHSEQ"
oSheet.Range("B1").Value = "VDCODE"
oSheet.Range("C1").Value = "CURRENCY"
oSheet.Range("D1").Value = "RATE"
oSheet.Range("E1").Value = "SPREAD"
oSheet.Range("F1").Value = "RATETYPE"
oSheet.Range("G1").Value = "RATEMATCH"
oSheet.Range("H1").Value = "RATEDATE"
oSheet.Range("I1").Value = "RATEOPER"
If oExcel.Application.Sheets.Count() < 2 Then
oSheet = CType(oBook.Worksheets.Add(), Excel.Worksheet)
Else
oSheet = oExcel.Worksheets(2)
End If
oSheet.Name = "Requisition_Detail_Opt__Fields"
oSheet.Range("A1").Value = "RQNHSEQ"
oSheet.Range("B1").Value = "RQNLREV"
oSheet.Range("C1").Value = "OPTFIELD"
oSheet.Range("D1").Value = "VALUE"
oSheet.Range("E1").Value = "TYPE"
oSheet.Range("F1").Value = "LENGTH"
oSheet.Range("G1").Value = "DECIMALS"
oSheet.Range("H1").Value = "ALLOWNULL"
oSheet.Range("I1").Value = "VALIDATE"
oSheet.Range("J1").Value = "SWSET"
oSheet.Range("K1").Value = "VALINDEX"
oSheet.Range("L1").Value = "VALIFTEXT"
oSheet.Range("M1").Value = "VALIFMONEY"
oSheet.Range("N1").Value = "VALIFNUM"
oSheet.Range("O1").Value = "VALIFLONG"
oSheet.Range("P1").Value = "VALIFBOOL"
oSheet.Range("Q1").Value = "VALIFDATE"
oSheet.Range("R1").Value = "VALIFTIME"
oSheet.Range("S1").Value = "FDESC"
oSheet.Range("T1").Value = "VDESC"
是的,声明您的工作表要好得多,因为它将使您的代码更易于阅读和使用。
Dim fileTest As String = "C:\Temp\ExcelTest\test.xlsx"
If File.Exists(fileTest) Then
File.Delete(fileTest)
End If
Dim oExcel As Object
oExcel = CreateObject("Excel.Application")
Dim oBook As Excel.Workbook
oBook = oExcel.Workbooks.Add
Dim oSheet1Name As String = "Requisition_Vendors"
Dim oSheet2Name As String = "Requisition_Detail_Opt__Fields"
Dim oSheet1 As Excel.Worksheet = oBook.Worksheets(oSheet1Name)
Dim oSheet2 As Excel.Worksheet = oBook.Worksheets(oSheet2Name)
If oExcel.Application.Sheets.Count() < 1 Then
oSheet1 = CType(oBook.Worksheets.Add(), Excel.Worksheet)
Else
oSheet1 = oExcel.Worksheets(1)
End If
With oSheet1
.Name = oSheet1Name
.Range("A1").Value = "RQNHSEQ"
.Range("B1").Value = "VDCODE"
.Range("C1").Value = "CURRENCY"
.Range("D1").Value = "RATE"
.Range("E1").Value = "SPREAD"
.Range("F1").Value = "RATETYPE"
.Range("G1").Value = "RATEMATCH"
.Range("H1").Value = "RATEDATE"
.Range("I1").Value = "RATEOPER"
End With
If oExcel.Application.Sheets.Count() < 2 Then
oSheet2 = CType(oBook.Worksheets.Add(), Excel.Worksheet)
Else
oSheet2 = oExcel.Worksheets(2)
End If
With oSheet2
.Name = oSheet2Name
.Range("A1").Value = "RQNHSEQ"
.Range("B1").Value = "RQNLREV"
.Range("C1").Value = "OPTFIELD"
.Range("D1").Value = "VALUE"
.Range("E1").Value = "TYPE"
.Range("F1").Value = "LENGTH"
.Range("G1").Value = "DECIMALS"
.Range("H1").Value = "ALLOWNULL"
.Range("I1").Value = "VALIDATE"
.Range("J1").Value = "SWSET"
.Range("K1").Value = "VALINDEX"
.Range("L1").Value = "VALIFTEXT"
.Range("M1").Value = "VALIFMONEY"
.Range("N1").Value = "VALIFNUM"
.Range("O1").Value = "VALIFLONG"
.Range("P1").Value = "VALIFBOOL"
.Range("Q1").Value = "VALIFDATE"
.Range("R1").Value = "VALIFTIME"
.Range("S1").Value = "FDESC"
.Range("T1").Value = "VDESC"
End With
我的团队通过创建一个共享函数 (
CreateWorksheet
) 设法做到了这一点,该函数通过引用当前工作表的初始计数将工作表附加到 Excel 文件。
在
site.master.vb
:
Public Function CreateWorksheet(ByVal Exclpackage As OfficeOpenXml.ExcelPackage, ByVal sheetName As String) As OfficeOpenXml.ExcelWorksheet
Dim currentWorksheetCount As Integer = Exclpackage.Workbook.Worksheets.Count
Exclpackage.Workbook.Worksheets.Add(sheetName)
Dim ws As OfficeOpenXml.ExcelWorksheet = Exclpackage.Workbook.Worksheets(currentWorksheetCount+1)
ws.Name = sheetName
...
Return ws
End Function
Public Function PopulateWorksheet(ByRef myWorksheet As OfficeOpenXml.ExcelWorksheet, ByVal myDataTable As Data.DataTable, ByVal cellNum As String )
myWorksheet.Cells(cellNum).LoadFromDataTable(myDataTable, True)
myWorksheet.Cells.AutoFitColumns()
End Function
Public Function SaveExcelPkgToDisk(ByVal myWorkbook As OfficeOpenXml.ExcelPackage, ByVal filePath As String)
If File.Exists(filePath) Then
File.Delete(filePath)
End If
Dim myFileStream As FileStream = File.Create(filePath)
myFileStream.Close()
File.WriteAllBytes(filePath, myWorkbook.GetAsByteArray())
End Function
Public Function DownloadFile(ByVal fileName As String, ByVal filePath As String, ByVal fileType As String)
Response.Clear()
Response.ContentType = fileType
Response.AddHeader("Content-Disposition", "attachment; filename=" & fileName)
Response.WriteFile(filePath)
Response.Flush()
Response.End()
End Function
在我的网络应用程序中:
Dim newFile As FileInfo = New FileInfo(myFileName & ".xlsx")
Dim mypackage As OfficeOpenXml.ExcelPackage = New OfficeOpenXml.ExcelPackage(newFile)
Dim ws1 As OfficeOpenXml.ExcelWorksheet = Master.CreateWorksheet(mypackage, mySheetName1)
Dim dt As DataTable = mySQLDataSource.Select(DataSourceSelectArguments.Empty).Table
Master.PopulateWorksheet(ws1, dt, "A1")
Dim ws2 As OfficeOpenXml.ExcelWorksheet = Master.CreateWorksheet(mypackage, mySheetName2)
...
Master.SaveExcelPkgToDisk(mypackage, myFilePath)
Master.DownloadFile(myFileName & ".xlsx", myFilePath, "application/xlsx")