如果你不想使用循环的方式,而是想直接赋值给多个不相邻的单元格,你可以使用 Range 对象的 Value 属性,并通过逗号分隔的单元格地址字符串进行赋值。以下是一个示例:
using System;
using Excel = Microsoft.Office.Interop.Excel;
class Program
{
static void Main()
{
// 创建 Excel 应用程序对象
Excel.Application excelApp = new Excel.Application();
excelApp.Visible = true; // 使 Excel 可见
// 添加一个新的工作簿
Excel.Workbook workbook = excelApp.Workbooks.Add();
// 获取工作表
Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];
// 定义二维数组
object[,] data = new object[,]
{
{ "B2", "A7", "A9" },
{ 1, 2, 3 }
};
// 获取数组的行数和列数
int rows = data.GetLength(0);
int cols = data.GetLength(1);
// 构建逗号分隔的单元格地址字符串
string cellAddresses = string.Join(",", data.Cast<object>().Where((value, index) => index % cols == 0).Select(value => Convert.ToString(value)));
// 将数组赋值给指定单元格
worksheet.Range[cellAddresses].Value = data;
// 释放 Excel 对象
ReleaseObject(worksheet);
ReleaseObject(workbook);
ReleaseObject(excelApp);
}
// 释放 COM 对象
static void ReleaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch (Exception ex)
{
obj = null;
Console.WriteLine("Exception Occurred while releasing object " + ex.ToString());
}
finally
{
GC.Collect();
}
}
}
在这个示例中,我们使用 string.Join 构建了一个逗号分隔的单元格地址字符串,并将其作为参数传递给 Range 对象的 Value 属性。这样,可以一次性将数据赋值给多个不相邻的单元格,而不需要循环。