Well, it is easy to do it. I have updated my previous code and enhanced it to accomplish your task. I have created three data tables using three methods in the class that implements LightCelllsDataProvider interface and filled data into them. Now I used StartSheet() method to call different data table for different sheet accordingly. Please refer to it and create your own sample codes accordingly.
Note: To save my time, I decrease the matrix to 100000 * 3 records per each sheet.
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports Aspose.Cells
Imports System.Data
Module Module1
Sub Main()
'Specify your desired matrix
Dim rowsCount As Integer = 100000
Dim colsCount As Integer = 3
Dim sheetsCount As Integer = 3
Dim workbook = New Workbook()
For k As Integer = 0 To sheetsCount - 1
Dim sheet As Worksheet = Nothing
If k = 0 Then
sheet = workbook.Worksheets(k)
sheet.Name = “test”
Else
Dim sheetIndex As Integer = workbook.Worksheets.Add()
sheet = workbook.Worksheets(sheetIndex)
sheet.Name = “test” & sheetIndex
End If
Next k
Dim ooxmlSaveOptions = New OoxmlSaveOptions()
ooxmlSaveOptions.LightCellsDataProvider = New TestDataProvider(workbook, sheetsCount, rowsCount, colsCount)
workbook.Save(“e:\test2\myoutput_testnew_2.xlsx”, ooxmlSaveOptions)
End Sub
End Module
Public Class TestDataProvider
Implements LightCellsDataProvider
Private dt As DataTable
Public Sub FillTable1()
dt = New DataTable()
dt.Columns.Clear()
dt.Columns.Add(“Column1”, GetType(Integer))
dt.Columns.Add(“Column2”, GetType(String))
dt.Columns.Add(“Column3”, GetType(Integer))
For i As Integer = 0 To maxRows - 1
dt.Rows.Add(i \ 10 + 1, String.Format(“Item {0}”, i), i)
Next i
End Sub
Public Sub FillTable2()
dt = New DataTable()
dt.Columns.Clear()
dt.Columns.Add(“ColumnA”, GetType(Integer))
dt.Columns.Add(“ColumnB”, GetType(String))
dt.Columns.Add(“ColumnC”, GetType(Integer))
For i As Integer = 0 To maxRows - 1
dt.Rows.Add(i \ 10 + 2, String.Format(“Column {0}”, i), i)
Next i
End Sub
Public Sub FillTable3()
dt = New DataTable()
dt.Columns.Clear()
dt.Columns.Add(“A”, GetType(Integer))
dt.Columns.Add(“B”, GetType(String))
dt.Columns.Add(“C”, GetType(Integer))
For i As Integer = 0 To maxRows - 1
dt.Rows.Add(i \ 10 + 3, String.Format(“My Item {0}”, i), i)
Next i
End Sub
Private _row As Integer = -1
Private _column As Integer = -1
Private sheeCount As Integer
Private maxRows As Integer
Private maxColumns As Integer
Private _workbook As Workbook
Public Sub New(ByVal workbook As Workbook, ByVal sheetCount As Integer, ByVal maxRows As Integer, ByVal maxColumns As Integer)
Me._workbook = workbook
Me.maxRows = maxRows
Me.maxColumns = maxColumns
Me.sheeCount = sheetCount
End Sub
Public Function IsGatherString() As Boolean Implements LightCellsDataProvider.IsGatherString
Return False
End Function
Public Function NextCell() As Integer Implements LightCellsDataProvider.NextCell
_column += 1
If _column < Me.maxColumns Then
Return _column
Else
_column = -1
Return -1
End If
End Function
Public Function NextRow() As Integer Implements LightCellsDataProvider.NextRow
_row += 1
If _row < Me.maxRows Then
_column = -1
Return _row
Else
Return -1
End If
End Function
Public Sub StartCell(ByVal cell As Cell) Implements LightCellsDataProvider.StartCell
cell.PutValue(dt.Rows(_row)(_column)) '_row + _column);
End Sub
Public Sub StartRow(ByVal row As Row) Implements LightCellsDataProvider.StartRow
End Sub
Public Function StartSheet(ByVal sheetIndex As Integer) As Boolean Implements LightCellsDataProvider.StartSheet
If sheetIndex = 0 Then
FillTable1()
'reset row/column index
_row = -1
_column = -1
Return True
ElseIf sheetIndex = 1 Then
FillTable2()
'reset row/column index
_row = -1
_column = -1
Return True
ElseIf sheetIndex = 2 Then
FillTable3()
'reset row/column index
_row = -1
_column = -1
Return True
End If
'If sheetIndex < sheeCount Then
'…
'End If
Return False
End Function
End Class
Thank you.