导出数据到excel

在本文中,我将向您展示如何使用 C# 和 VB.NET 从各种数据源(如数组、自定义对象集合、DataTable、DataView、DataGrid、GridView、HTML、JSON 和 CSV)将数据导出到 Excel。

使用 Aspose.Cells API 在 C# 中将数据导出到 Excel

Aspose.Cells for .NET 是一个强大的电子表格操作 API,可让您在 .NET 应用程序中创建、编辑或转换 Excel 文件。 API 易于使用的方法使您能够在几行代码中无缝地执行 Excel 自动化功能。 NuGet 是下载和安装 Aspose.Cells API for .NET 的最简单方法。打开“管理 NuGet 包”窗口并在搜索文本框中键入“Aspose.Cells”以找到 Aspose.Cells .NET 包。最后,单击安装按钮以安装最新版本的软件包。

在 C# 中将数组导出到 Excel

我们可以将引用类型或值类型的数组(一维或二维)导出到 Excel 文档。我们使用 Cells 集合的 ImportArray 方法将数据从数组导出到电子表格。 ImportArray 方法的重载版本如下。

姓名说明
ImportArray(Double[], Int32, Int32, Boolean)将双精度数组导出到工作表中。
ImportArray(Int32[], Int32, Int32, Boolean)将整数数组导出到工作表中。
ImportArray(String[], Int32, Int32, Boolean)将字符串数组导出到工作表中。
ImportArray(Double[,], Int32, Int32)将 double 的二维数组导出到工作表中。
ImportArray(Int32[,], Int32, Int32)将整数的二维数组导出到工作表中。
ImportArray(String[,], Int32, Int32)将二维字符串数组导出到工作表中。

典型的重载采用以下参数:

  • Array,您从中导出内容的数组对象。
  • 行号,数据将被导出到的第一个单元格(从零开始)的行号。
  • 列号,数据将被导出到的第一个单元格(从零开始)的列号。
  • 是垂直的,一个布尔值,指定是垂直还是水平导出数据。

以下是在 C# 中将数组导出到 Excel 文件的步骤。

以下代码示例演示如何将字符串数组导出到 C# 中的 Excel 文件。

// Instantiating a Workbook object
Workbook workbook = new Workbook();

// Obtaining the reference of the worksheet
Worksheet worksheet = workbook.Worksheets[0];

// Creating an array containing names as string values
string[] names = new string[] { "Laurence Chen", "Roman Korchagin", "Kyle Huang" };

// Exporting the array of names to first row and first column vertically
worksheet.Cells.ImportArray(names, 0, 0, true);

// Saving the Excel file
workbook.Save("StringsArray.xlsx");
将字符串数组导出到 Excel

将一组数据导出到 Excel

同样,我们可以将二维数组导出到 Excel 文件中。以下代码示例展示了如何在 C# 中将二维数组导出到 Excel 文件。

// Creating a two-dimensional array of integers
int[,] array2D = new int[4, 2] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };

// Exporting a two-dimensional array at the first row and first column of the worksheet
worksheet.Cells.ImportArray(array2D, 0, 0);

在 C# 中将 ArrayList 导出到 Excel

要将数据从 ArrayList 导出到工作表,请调用 Cells 集合的 ImportArrayList 方法。 ImportArrayList 方法采用以下参数:

  • 数组列表表示您要导出的 ArrayList 对象。
  • 行号表示数据将被导出到的第一个单元格的行号。
  • 列号表示数据将被导出到的第一个单元格的列号。
  • 垂直是一个布尔值,指定是垂直还是水平导出数据。

以下代码示例演示如何在 C# 中将 ArrayList 导出到 Excel 文件。

// Instantiating a Workbook object
Workbook workbook = new Workbook();

// Obtaining the reference of the worksheet
Worksheet worksheet = workbook.Worksheets[0];

// Instantiating an ArrayList object
ArrayList list = new ArrayList();

// Add few names to the list as string values
list.Add("Laurence Chen");
list.Add("Roman Korchagin");
list.Add("Kyle Huang");
list.Add("Tommy Wang");

// Exporting the contents of ArrayList vertically at the first row and first column of the worksheet. 
worksheet.Cells.ImportArrayList(list, 0, 0, true);

// Saving the Excel file
workbook.Save("ArrayListExport.xlsx");

在 C# 中将自定义对象的集合导出到 Excel

要将数据从自定义对象集合导出到工作表,我们使用 ImportCustomObjects 方法。此方法有两个重载版本。

  1. ImportCustomObjects(ICollection list, String[] propertyNames, Boolean isPropertyNameShown, Int32 firstRow, Int32 firstColumn, Int32 rowNumber, Boolean 插入, String dateFormatString, Boolean convertStringToNumber)
  2. ImportCustomObjects(ICollection list, Int32 firstRow, Int32 firstColumn, ImportTableOptions options)

我们将一一探索每个重载的方法。下面给出第一个重载方法的参数说明:

  • list 自定义对象的集合。
  • propertyNames 要导出的对象的属性名称。如果为 null,则将导出所有属性。
  • isPropertyNameShown 指示是否将属性名称导出到第一行。
  • firstRow 要导出到的第一个单元格的行号。
  • firstColumn 要导出到的第一个单元格的列号。
  • rowNumber 要导出的对象数。
  • insertRows 指示是否添加额外的行以适应数据。
  • dateFormatString 单元格的日期格式字符串。
  • convertStringToNumber 指示此方法是否将尝试将字符串转换为数字。

在以下示例中,我们将 Person 对象列表导出到 C# 中的 Excel 文档。请注意,我们只导出了 Person 对象的两个属性(姓名和年龄)。

// Instantiate a new Workbook
Workbook book = new Workbook();
// Obtaining the reference of the worksheet
Worksheet sheet = book.Worksheets[0];

// Define List
List<Person> list = new List<Person>();

list.Add(new Person("Mike", 25, "Software Engineer"));
list.Add(new Person("Steve", 30, "Doctor"));
list.Add(new Person("Billy", 35, "Teacher"));

// We pick only Name and Age columns, not all, to export to the worksheet         
sheet.Cells.ImportCustomObjects((System.Collections.ICollection)list,
    new string[] { "Name", "Age" }, // propertyNames
    true, // isPropertyNameShown
    0, // firstRow
    0, // firstColumn
    list.Count, // Number of objects to be exported
    true, // insertRows
    null, // dateFormatString
    false); // convertStringToNumber

// Save the Excel file
book.Save("ExportedCustomObjects.xlsx");
       
public class Person
{
    public string Name { get; set; }

    public int Age { get; set; }

    public string Occupation { get; set; }

    public Person(string name, int age, string occupation)
    {
        Age = age;
        Name = name;
        Occupation = occupation;
    }
}
将对象列表导出到 Excel

将 Person 对象列表导出到 Excel

现在我们探索ImportCustomObjects的第二个重载方法。该方法的参数说明如下:

  • list 自定义对象的列表。
  • firstRow 要导出到的第一个单元格的行号。
  • firstColumn 要导出到的第一个单元格的列号。
  • 选项 ImportTableOptions 对象。

ImportTableOptions 参数提供了几个用于将数据导出到单元格的选项。其中一些如下:

  • CheckMergedCells Excel 文档是否包含合并的单元格。
  • ColumnIndexes 要从数据源导出的列索引的整数数组(从 0 开始)。 null 表示应导出所有列。
  • ConvertGridStyle 指示是否将网格视图的样式应用到单元格。
  • ConvertNumericData 一个布尔值,指示应将字符串值转换为数字值还是日期值。
  • DateFormat 获取或设置具有导出的 DateTime 值的单元格的日期格式字符串。
  • DefaultValues 表中单元格的默认值为空。
  • InsertRows 指示是否应为导出数据记录添加新行。
  • IsFieldNameShown 指示是否应导出字段名称。
  • IsFormulas 指示数据是否为公式。
  • IsHtmlString 指示数据是否包含 HTML 标记。如果我们将该值设置为 true,则在将数据导出到 Excel 文档时将保留 HTML 格式。
  • NumberFormats 获取或设置数字格式
  • ShiftFirstRowDown 指示插入行时第一行是否应下移。
  • TotalColumns 获取或设置要从数据源导出的总列数。 -1 表示给定数据源的所有列。
  • TotalRows 获取或设置要从数据源导出的总行数。 -1 表示给定数据源的所有行。

在以下示例中,我们将数据从对象集合导出到包含合并单元格的工作表。我们将 ImportTableOptions.CheckMergedCells 属性的值设置为 true,因为 Excel 文档包含合并的单元格。

// Opening an existing Workbook.
Workbook workbook = new Workbook("SampleMergedTemplate.xlsx");
List<Product> productList = new List<Product>();

// Creating a collection of Products
for (int i = 0; i < 3; i++)
{
    Product product = new Product
    {
        ProductId = i,
        ProductName = "Test Product - " + i
    };
    productList.Add(product);
}

ImportTableOptions tableOptions = new ImportTableOptions();
// Set CheckMergedCells property to true
tableOptions.CheckMergedCells = true;
tableOptions.IsFieldNameShown = false;

//Export data to excel template (in second row, first column) 
workbook.Worksheets[0].Cells.ImportCustomObjects((ICollection)productList, 1, 0, tableOptions);
workbook.Save("SampleMergedTemplate_out.xlsx", SaveFormat.Xlsx);

public class Product
{
    public int ProductId { get; set; }

    public string ProductName { get; set; }
}
将数据从对象集合导出到包含合并单元格的工作表

将数据导出到包含合并单元格的 Excel 文档

在 C# 中将行和列从一个 Excel 文件复制到另一个文件

我们可以通过编程将行和列从一个 Excel 文档复制到另一个文档。复制行(或列)时,其中包含的数据,包括公式(具有更新的引用)和值、注释、格式、隐藏单元格、图像和其他绘图对象也会被复制。我们还可以在 Excel 文档中复制同一工作表内或不同工作表中的行和列。 Aspose.Cells 提供以下方法来复制行和列。

以下示例代码显示了如何在 C# 中将行从一个 Excel 文档复制到另一个文档。

// Open the source excel file.
Workbook srcWorkbook = new Workbook("Source_Workbook.xlsx");

// Instantiate the destination excel file.
Workbook destWorkbook = new Workbook();

// Get the first worksheet of the source workbook.
Worksheet srcWorksheet = srcWorkbook.Worksheets[0];

// Get the first worksheet of the destination workbook.
Worksheet desWorksheet = destWorkbook.Worksheets[0];

// Copy all the rows of the first worksheet of source Workbook to
// the first worksheet of destination Workbook.
desWorksheet.Cells.CopyRows(srcWorksheet.Cells, 0, 0, srcWorksheet.Cells.MaxDisplayRange.RowCount);

// Save the excel file.
destWorkbook.Save("Destination_Workbook.xlsx");

以下示例代码显示如何将一个 Excel 文档的特定行复制到另一个。

// Open the source excel file.
Workbook srcWorkbook = new Workbook("Source_Workbook.xlsx");

// Instantiate the destination excel file.
Workbook destWorkbook = new Workbook();

// Get the first worksheet of the source workbook.
Worksheet srcWorksheet = srcWorkbook.Worksheets[0];

// Get the first worksheet of the destination workbook.
Worksheet desWorksheet = destWorkbook.Worksheets[0];

// Copy the second row of the source Workbook to the first row of destination Workbook.
desWorksheet.Cells.CopyRow(srcWorksheet.Cells, 1, 0);

// Copy the fourth row of the source Workbook to the second row of destination Workbook.
desWorksheet.Cells.CopyRow(srcWorksheet.Cells, 3, 1);

// Save the excel file.
destWorkbook.Save("Destination_Workbook.xlsx");
将行的数据从一个 Excel 文档复制到另一个

我们可以类似地使用 CopyColumnCopyColumns 方法将列的数据从一个 Microsoft Excel 文档复制到另一个文档。

在 C# 中将数据表导出到 Excel

来自 ADO.NET 对象(例如 DataTableDataColumnDataView)的数据可以导出到 Excel 工作表。要从 DataTable 中导出数据,我们调用 Cells 集合的 ImportData 方法。 ImportData 方法有许多重载版本,但我们使用以下方法:

public int ImportData(
	DataTable table,
	int firstRow,
	int firstColumn,
	ImportTableOptions options
)

参数说明如下:

  • 要导出的表 DataTable 对象。
  • firstRow 要导出到的第一个单元格的行号。
  • firstColumn 要导出到的第一个单元格的列号。
  • optionsType ImportTableOptions 对象。

在以下代码示例中,我们将创建一个包含三列和两行的 DataTable 对象。并将其导出到 Excel 工作表。

// Instantiating a Workbook object            
Workbook workbook = new Workbook();

// Obtaining the reference of the worksheet
Worksheet worksheet = workbook.Worksheets[0];

// Instantiating a "Products" DataTable object
DataTable dataTable = new DataTable("Products");

// Adding columns to the DataTable object
dataTable.Columns.Add("Product ID", typeof(int));
dataTable.Columns.Add("Product Name", typeof(string));
dataTable.Columns.Add("Units In Stock", typeof(int));

// Creating an empty row in the DataTable object
DataRow dr = dataTable.NewRow();

// Adding data to the row
dr[0] = 1;
dr[1] = "Aniseed Syrup";
dr[2] = 15;

// Adding filled row to the DataTable object
dataTable.Rows.Add(dr);

// Creating another empty row in the DataTable object
dr = dataTable.NewRow();

// Adding data to the row
dr[0] = 2;
dr[1] = "Boston Crab Meat";
dr[2] = 123;

// Adding filled row to the DataTable object
dataTable.Rows.Add(dr);

// Setting IsFieldNameShown property to true will add column names // of the DataTable to the worksheet as a header row
ImportTableOptions tableOptions = new ImportTableOptions();
tableOptions.IsFieldNameShown = true;

// Exporting the contents of DataTable at the first row and first column.
worksheet.Cells.ImportData(dataTable, 0, 0, tableOptions);

// Saving the Excel file
workbook.Save("DataTable_Eport.xlsx");
将数据表导出到 Excel

将数据表导出到 Excel

在 C# 中将选择性数据列的数据导出到 Excel

我们可以将 DataTable 或 DataView 的选择性 DataColumns 导出到 Excel 文档。如前所述,ImportData 方法接受 ImportTableOptions 类型的参数。 ImportTableOptions 类有一个 ColumnIndexes 属性,它接受我们要导出的列索引数组(从零开始)。在以下代码示例中,我们仅将 DataTable 的两个 DataColumn 导出到 Excel 工作表。

// Instantiating a "Products" DataTable object
DataTable dataTable = new DataTable("Products");

// Adding columns to the DataTable object
dataTable.Columns.Add("Product ID", typeof(int));
dataTable.Columns.Add("Product Name", typeof(string));
dataTable.Columns.Add("Units In Stock", typeof(int));

// Creating an empty row in the DataTable object
DataRow dr = dataTable.NewRow();

// Adding data to the row
dr[0] = 1;
dr[1] = "Aniseed Syrup";
dr[2] = 15;

// Adding filled row to the DataTable object
dataTable.Rows.Add(dr);

// Creating another empty row in the DataTable object
dr = dataTable.NewRow();

// Adding data to the row
dr[0] = 2;
dr[1] = "Boston Crab Meat";
dr[2] = 123;

// Adding filled row to the DataTable object
dataTable.Rows.Add(dr);

// Instantiate a new Workbook
Workbook book = new Workbook();

Worksheet sheet = book.Worksheets[0];

// Create export options
ImportTableOptions importOptions = new ImportTableOptions();
// Sets the columns (0-based) to export from data source.
// null means all columns should be exported.
importOptions.ColumnIndexes = new int[] { 0, 1 };
importOptions.IsFieldNameShown = true;

// Exporting the values of 1st and 2nd columns of the data table
sheet.Cells.ImportData(dataTable, 0, 0, importOptions);

book.Save("DataColumsExport.xlsx");
将选择性数据列的数据导出到 Excel

DataColumns 到 Excel 的输出

在 C# 中将数据从 DataView 导出到 Excel

DataView 是 DataTable 上的一个视图,可以对其进行定制以呈现来自 DataTable 的数据子集。我们使用以下重载版本的 ImportData 方法将数据从 DataView 导出到 Excel 文档。

public int ImportData(
	DataView dataView,
	int firstRow,
	int firstColumn,
	ImportTableOptions options
)

我们知道有两种方法可以创建 DataView。我们可以使用 DataView 构造函数,也可以创建对 DataTableDefaultView 属性的引用。在下面的代码示例中,我们使用后一种方式来创建 DataView。

worksheet.Cells.ImportData(dataTable.DefaultView, 0, 0, options);

在 C# 中将数据从 DataGrid 和 GridView 导出到 Excel

Aspose.Cells 库允许我们将数据从 Microsoft Grid 控件(如 DataGrid 和 GridView)导出到 Excel 工作表。它提供 ImportDataGrid 方法从 DataGrid 导出数据和 ImportGridView 方法从 GridView 导出数据。

ImportDataGrid 方法有许多重载版本,但典型的重载采用以下参数:

  • dataGrid,我们从中导出内容的 DataGrid 对象。
  • firstRow,数据将被导出到的第一个单元格的行号。
  • firstColumn,数据将被导出到的第一个单元格的列号。
  • insertRows,一个布尔属性,指示是否应将额外的行添加到工作表以适应数据。
  • importStyle,一个布尔属性,指示是否应导出单元格样式。

下面的代码示例演示如何将数据从 DataGrid 导出到 C# 中的 Excel 文件。

// Create a DataTable object and set it as the DataSource of the DataGrid.
DataTable dataTable = new DataTable("Products");
dataTable.Columns.Add("Product ID", typeof(int));
dataTable.Columns.Add("Product Name", typeof(string));
dataTable.Columns.Add("Units In Stock", typeof(int));

DataRow dr = dataTable.NewRow();
dr[0] = 1;
dr[1] = "Aniseed Syrup";
dr[2] = 15;
dataTable.Rows.Add(dr);

dr = dataTable.NewRow();
dr[0] = 2;
dr[1] = "Boston Crab Meat";
dr[2] = 123;
dataTable.Rows.Add(dr);

// Now take care of DataGrid
DataGrid dg = new DataGrid();
dg.DataSource = dataTable;
dg.DataBind();

// We have a DataGrid object with some data in it.
// Lets export it to an Excel worksheet.

// Creat a new workbook
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.Worksheets[0];

// Exporting the contents of the DataGrid to the worksheet
worksheet.Cells.ImportDataGrid(dg, 0, 0, false);

// Save it as Excel file
workbook.Save("ExportDataGrid.xlsx");

在 C# 中将 HTML 格式的数据导出到 Excel

Aspose.Cells 允许您将 HTML 格式的数据导出到 Excel 工作表。 API 在导出数据时解析 HTML 格式的文本,并将 HTML 转换为格式化的单元格值。在以下示例代码中,DataTable 包含 HTML 格式的文本,我们使用 ImportData 方法将其导出到 Excel 文档。

// Prepare a DataTable with some HTML formatted values
DataTable dataTable = new DataTable("Products");

dataTable.Columns.Add("Product ID", typeof(int));
dataTable.Columns.Add("Product Name", typeof(string));
dataTable.Columns.Add("Units In Stock", typeof(int));

DataRow dr = dataTable.NewRow();
dr[0] = 1;
// Make text italicize
dr[1] = "<i>Aniseed</i> Syrup";
dr[2] = 15;
dataTable.Rows.Add(dr);

dr = dataTable.NewRow();
dr[0] = 2;
// Make text bold
dr[1] = "<b>Boston Crab Meat</b>";
dr[2] = 123;
dataTable.Rows.Add(dr);

// Create export options
ImportTableOptions exportOptions = new ImportTableOptions();
exportOptions.IsFieldNameShown = true;
// Set IsHtmlString property to true as the data contains HTML tags. 
exportOptions.IsHtmlString = true;

// Create workbook
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.Worksheets[0];

worksheet.Cells.ImportData(dataTable, 0, 0, exportOptions);

workbook.Save("HTMLFormattedData_Out.xlsx");
HTML 格式的数据到电子表格

将 HTML 导出的数据输出到 Excel 文档

在 C# 中将 HTML 文件导出到 Excel

Aspose.Cells 允许我们将 HTML 文件导出到 Excel。 HTML 文件应该是面向 Microsoft Excel 的,即 MS-Excel 应该能够打开它。

// An HTML file
string filePath = "Book1.html";

// Instantiate LoadOptions specified by the LoadFormat.
HtmlLoadOptions loadOptions = new HtmlLoadOptions(LoadFormat.Html);

// Create a Workbook object and open the HTML file.
Workbook wb = new Workbook(filePath, loadOptions);

// Save the file as Excel Document
wb.Save("Book1_out.xlsx");

在 C# 中将 JSON 数据导出到 Excel

有时我们需要将 JSON 数据导出到 Excel 文档。使用 Aspose.Cells,我们只需几行代码就可以轻松做到这一点。 Aspose.Cells 提供了一个 JsonUtility 类,该类具有用于将 JSON 数据导出到 Excel 文档的 ImportData 方法。 ImportData 方法接受 JsonLayoutOptions 对象作为参数。 JsonLayoutOptions 类表示 JSON 布局的选项,具有以下属性。

  • ArrayAsTable: Indicates whether the array should be processed as a table.
  • ConvertNumericOrDate: Gets or sets a value that indicates whether the string in JSON is to be converted to numeric or date.
  • DateFormat: Gets and sets the format of the date value.
  • IgnoreArrayTitle: Indicates whether to ignore the title if the property of the object is an array.
  • IgnoreNull: Indicates whether the null value should be ignored.
  • IgnoreObjectTitle: Indicates whether to ignore the title if the property of the object is an object.
  • NumberFormat: Gets and sets the format of the numeric value.
  • TitleStyle: Gets and sets the style of the title.

在以下示例代码中,我们将 JSON 数据导出到 C# 中的 Excel 文件。

// Instantiating a Workbook object
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.Worksheets[0];

// Read JSON file
string jsonInput = File.ReadAllText("Sample.json");

// Set Styles
CellsFactory factory = new CellsFactory();
Style style = factory.CreateStyle();
style.HorizontalAlignment = TextAlignmentType.Center;
style.Font.Color = System.Drawing.Color.BlueViolet;
style.Font.IsBold = true;

// Set JsonLayoutOptions
JsonLayoutOptions options = new JsonLayoutOptions();
options.TitleStyle = style;
options.ArrayAsTable = true;

// Export JSON Data
JsonUtility.ImportData(jsonInput, worksheet.Cells, 0, 0, options);

// Save Excel file
workbook.Save("ExportingJsonData.xlsx");
{
  "quiz": {
    "sport": {
      "q1": {
        "question": "Which one is correct team name in NBA?",
        "answer": "Huston Rocket"
      }
    },
    "maths": {
      "q1": {
        "question": "5 + 7 = ?",
        "answer": "12"
      },
      "q2": {
        "question": "12 - 8 = ?",
        "answer": "4"
      }
    }
  }
}
JSON 数据到 Excel 文档

将 JSON 数据导出到 Excel

在 C# 中将 CSV 数据导出到 Excel

逗号分隔值 (CSV) 文件是使用逗号分隔值的分隔文本文件。 CSV 文件通常以纯文本形式存储表格数据(数字和文本),在这种情况下,每行将具有相同数量的字段。

以下代码示例显示了我们如何使用 Aspose.Cells 库打开 CSV 文件并将其保存为 Excel 文件。

// Instantiate LoadOptions with CSV LoadFormat.
LoadOptions loadOptions = new LoadOptions(LoadFormat.CSV);

// Open CSV file as a Workbook object
Workbook wb = new Workbook("Business-Price.csv", loadOptions);

// Save the file as an Excel Documnt
wb.Save("CSVAsAnExcelDocument.xlsx");
在电子表格文档中打开 CSV 文件

CSV 到 Excel 文档

结论

在这篇文章中,您已经了解了如何轻松地将数据从 Array、DataTable、DataView、DataGrid 和 GridView 导出到 C# 中的 Excel。您还了解了如何将 HTML、JSON、CSV 数据导出到 Excel 工作表。请查看 文档 以了解有关 Aspose.Cells API 提供的这些功能和其他几个功能的更多信息。如果您有任何问题,请随时通过我们的 支持论坛 与我们联系。

也可以看看