C# 如何从大型Excel文档中高效检索所有字符串

C# 如何从大型Excel文档中高效检索所有字符串,c#,.net,excel,C#,.net,Excel,Excel电子表格应由.NET读取。使用属性Value从活动范围读取所有值非常有效。这将通过一次调用Excel来传输二维数组中的所有值 但是,对于包含多个单元格的区域,无法读取字符串。因此,我们必须迭代所有单元格并使用Text属性。这表明较大文档的性能非常差 使用字符串而不是值的原因是为了获得正确的格式(例如日期或位数) 下面是一个用C#编写的示例代码来演示该方法 static void Main(string[] args) { Excel.Application xlApp = (E

Excel电子表格应由.NET读取。使用属性
Value
从活动范围读取所有值非常有效。这将通过一次调用Excel来传输二维数组中的所有值

但是,对于包含多个单元格的区域,无法读取字符串。因此,我们必须迭代所有单元格并使用
Text
属性。这表明较大文档的性能非常差

使用字符串而不是值的原因是为了获得正确的格式(例如日期或位数)

下面是一个用C#编写的示例代码来演示该方法

static void Main(string[] args)
{
    Excel.Application xlApp = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
    var worksheet = xlApp.ActiveSheet;
    var cells = worksheet.UsedRange();

    // read all values in array -> fast
    object[,] arrayValues = cells.Value;

    // create array for text of the same extension
    object[,] arrayText = (object[,])Array.CreateInstance(typeof(object),
        new int[] { arrayValues.GetUpperBound(0), arrayValues.GetUpperBound(1) },
        new int[] { arrayValues.GetLowerBound(0), arrayValues.GetLowerBound(1) });

    // read text for each cell -> slow
    for (int row = arrayValues.GetUpperBound(0); row <= arrayValues.GetUpperBound(0); ++row)
    {
        for (int col = arrayValues.GetUpperBound(0); col <= arrayValues.GetUpperBound(1); ++col)
        {
            object obj = cells[row, col].Text;
            arrayText[row, col] = obj;
        }
    }
}
static void Main(字符串[]args)
{
Excel.Application xlApp=(Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject(“Excel.Application”);
var工作表=xlApp.ActiveSheet;
var cells=worksheet.UsedRange();
//读取数组中的所有值->快速
对象[,]数组值=cells.Value;
//为相同扩展名的文本创建数组
object[,]arrayText=(object[,])Array.CreateInstance(typeof(object),
新的int[]{arrayValues.GetUpperBound(0),arrayValues.GetUpperBound(1)},
新的int[]{arrayValues.GetLowerBound(0),arrayValues.GetLowerBound(1)});
//读取每个单元格的文本->慢速

对于(int row=arrayValues.GetUpperBound(0);row您可以使用下面的代码:

using (MSExcel.Application app = MSExcel.Application.CreateApplication()) 
{
    MSExcel.Workbook book1 = app.Workbooks.Open( this.txtOpen_FilePath.Text);
    MSExcel.Worksheet sheet = (MSExcel.Worksheet)book1.Worksheets[1];
    MSExcel.Range range = sheet.GetRange("A1", "F13");

    object value = range.Value; //the value is boxed two-dimensional array
}

该代码是由提供的。它应该比您的代码更有效,但可能不是最好的。

谢谢您的回答,但是如果您查看我的解释和上面的示例,您将看到我使用的是range.Value。但是这不会带来格式。因此,如果您使用双倍,您不知道位数。如果您使用g日期/时间,您无法获取格式等。哦,对不起。我不知道更好的方法,但我会搜索,如果找到,请告诉您。