Class XlsWorkbookWriter
Writes a workbook to the legacy BIFF8 (.xls) binary format.
public sealed class XlsWorkbookWriter : IWorkbookWriter<XlsSheetWriter>, IDisposable, IAsyncDisposable
- Inheritance
-
XlsWorkbookWriter
- Implements
- Inherited Members
- Extension Methods
Remarks
Structured the same way as XlsxWorkbookWriter (XLSX). Unlike the ZIP writer, records are buffered in memory and the OLE container is assembled in EndAsync(CancellationToken): the BoundSheet offsets in the globals and the OLE FAT both need stream sizes known only at the end. Rows beyond the BIFF8 per-sheet cap (65,536) overflow into auto-generated continuation sheets, so memory scales with total row count rather than being bounded per sheet.
Methods
AddSheet(string)
Begins a new sheet named name and returns its writer. Only one sheet may be
open (started and not yet ended) at a time; the previous sheet's writer must be ended and
disposed before starting the next one.
public XlsSheetWriter AddSheet(string name)
Parameters
namestringThe sheet's name, shown to Excel; must be unique (ignoring case) within the workbook and meet Excel's sheet-name restrictions (1-31 characters, no
: \ / ? * [ ]).
Returns
- XlsSheetWriter
The writer for the new sheet.
Exceptions
- InvalidOperationException
The previously added sheet has not been ended yet.
AddSheet(string, ExcelSheetVisibility)
Begins a new sheet named name with the given tab-bar visibility, and returns
its writer. Same contract as AddSheet(string) otherwise.
public XlsSheetWriter AddSheet(string name, ExcelSheetVisibility visibility)
Parameters
namestringThe sheet's name, shown to Excel; must be unique (ignoring case) within the workbook and meet Excel's sheet-name restrictions (1-31 characters, no
: \ / ? * [ ]).visibilityExcelSheetVisibilityWhether the sheet is shown in the workbook's tab bar. A workbook whose sheets are all hidden is rejected when it is ended, since Excel reports such a file as damaged.
Returns
- XlsSheetWriter
The writer for the new sheet.
Exceptions
- ArgumentOutOfRangeException
visibilityis not a defined value.- InvalidOperationException
The previously added sheet has not been ended yet.
AddStyle(CellStyle)
Registers style and returns its index, reusing the index of an
already-registered style with the same value. Index 0 is always the general/default
style; index 1 is always the builtin date style every date cell already uses.
public int AddStyle(CellStyle style)
Parameters
styleCellStyleThe number format/bold/italic combination to register.
Returns
- int
The style's index, for use with SetColumnStyle(int, int) and StartRowAsync(int, CancellationToken).
Exceptions
- ArgumentException
The style's number format is longer than 255 characters.
- ExcelLimitExceededException
The workbook already has 200 distinct number formats, the most Excel opens.
Create(Stream, bool, XlsWriterOptions?)
Creates a writer that emits a BIFF8 (.xls) workbook to stream.
public static XlsWorkbookWriter Create(Stream stream, bool leaveOpen = false, XlsWriterOptions? options = null)
Parameters
streamStreamThe destination stream.
leaveOpenboolIf true, the stream is left open when the writer is disposed.
optionsXlsWriterOptions
Returns
Dispose()
Synchronous counterpart to DisposeAsync(), for native/unmanaged callers whose ABI is synchronous.
public void Dispose()
DisposeAsync()
Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources asynchronously.
public ValueTask DisposeAsync()
Returns
- ValueTask
A task that represents the asynchronous dispose operation.
End()
Synchronous counterpart to EndAsync(CancellationToken), for native/unmanaged callers whose ABI is synchronous.
public void End()
Exceptions
- InvalidOperationException
No sheet was ever added to the workbook.
EndAsync(CancellationToken)
Finalizes the workbook, writing any trailing structure (e.g. the workbook manifest/index) so the destination stream contains a complete, readable file. No further sheets may be added afterward. Idempotent with disposal: disposing an already-ended workbook is a no-op beyond releasing resources. A call that fails part-way still ends the workbook: it cannot be retried, and disposing it only releases the stream. A token already canceled on entry leaves the workbook untouched.
public ValueTask EndAsync(CancellationToken ct = default)
Parameters
ctCancellationTokenA token to cancel the operation.
Returns
Exceptions
- InvalidOperationException
No sheet was ever added to the workbook.
Flush()
Synchronous counterpart to FlushAsync(CancellationToken), for native/unmanaged callers whose ABI is synchronous.
public void Flush()
FlushAsync(CancellationToken)
Flushes any buffered output for the workbook and its current sheet to the destination stream.
public ValueTask FlushAsync(CancellationToken ct = default)
Parameters
ctCancellationTokenA token to cancel the operation.