How to: Load a Document to a Workbook

  • 4 minutes to read
IMPORTANT

The Workbook class is defined in the DevExpress.Docs.v20.2.dll assembly. Add this assembly to your project to use the Workbook API. You need a license to the DevExpress Office File API or DevExpress Universal Subscription to use this assembly in production code. Refer to the DevExpress Subscription page for pricing information.

Use the Workbook.LoadDocument method to load an existing spreadsheet document into a Workbook instance. A DocumentFormat enumeration member defines the document format.

Load from a File

// Add a reference to the DevExpress.Docs.dll assembly.
using DevExpress.Spreadsheet;
// ...

Workbook workbook = new Workbook();

// Load a workbook from the file.
workbook.LoadDocument("Documents\\Document.xlsx", DocumentFormat.Xlsx);

Load from a Stream

// Add a reference to the DevExpress.Docs.dll assembly. 
using DevExpress.Spreadsheet;
using System.IO;
// ...

Workbook workbook = new Workbook();

// Load a workbook from the stream.
using (FileStream stream = new FileStream("Documents\\Document.xlsx", FileMode.Open))
{
    workbook.LoadDocument(stream, DocumentFormat.Xlsx);
}

Asynchronous Load

Use the Workbook.LoadDocumentAsync method to asynchronously load a workbook from a file, stream, or byte array.

IMPORTANT

Take into account the following when you call this method:

  • The events fired by this method's call may occur in a different thread than the target operation.

  • The operation is not thread safe (documents should not be accessed simultaneously by different threads). Wait until the operation is completed before working with the document, i.e., use the await operator.

The following code sample shows how to merge two workbooks and save the result asynchronously.

private async void MergeWorkbooks()
{
  using (Workbook workbook1 = new Workbook())
  using (Workbook workbook2 = new Workbook())
  {
      await Task.WhenAll(new Task[]
      {
          workbook1.LoadDocumentAsync("book1.xlsx"),
          workbook2.LoadDocumentAsync("book2.xlsx")
      });
      workbook1.Append(workbook2);
      await workbook1.SaveDocumentAsync("merged.xlsx");
  }
}

Calculate Formulas in the Loaded Document

The default calculation mode for a Workbook is Manual. This mode implies that the Spreadsheet component does not recalculate formulas when you load a document. Call the Workbook.Calculate or Workbook.CalculateFull method to recalculate all formulas in the workbook.

using (Workbook workbook = new Workbook())
{
    // Load a document.
    workbook.LoadDocument("Document.xlsx", DocumentFormat.Xlsx);
    // Calculate formulas in the document.
    workbook.Calculate();
    // ...
}

Change Calculation Mode

Use the Workbook.Options.CalculationMode property to specify when to calculate formulas in a Workbook.

The following calculation modes are available:

  • Manual (default) - Formulas are calculated only on demand (after the Calculate method call). It allows you to improve document generation speed for large workbooks with multiple formulas.

  • UseDocumentSettings - Uses the calculation mode specified in the loaded document (this value is stored in the Workbook.DocumentSettings.Calculation.Mode property).

  • Automatic - Recalculates formulas each time a cell value, formula, or defined name changes.

using (Workbook workbook = new Workbook())
{
    // Change the calculation mode.
    workbook.Options.CalculationMode = WorkbookCalculationMode.UseDocumentSettings;
    // ...
    // Load a document.
    // ...
}
See Also