ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   reading xls file, speed problems (https://www.excelbanter.com/excel-programming/394826-reading-xls-file-speed-problems.html)

baga

reading xls file, speed problems
 
Hi, I am trying to load xls file, but it works VERY slow (~50 rows per
second), maybe it is possible to do it faster?

public class ExcelLoader
{
public static List<DataTable Load(string filename)
{
Excel.Application app = new Excel.Application();

Excel.Workbook workbook = app.Workbooks.Open(filename,
0, true, 5, "", "", true, Excel.XlPlatform.xlWindows,
"\t", false, false, 0, true);

List<DataTable tables = new List<DataTable();

foreach (Excel.Worksheet worksheet in workbook.Worksheets)
{
DataTable dt = LoadDataTable(worksheet);
tables.Add(dt);
}

app.Quit();

return tables;
}

private static DataTable LoadDataTable(Excel.Worksheet worksheet)
{
Excel.Range usedrange = worksheet.UsedRange;
int numrows = usedrange.Rows.Count;
int numcols = usedrange.Columns.Count;

string name = (string)worksheet.Name;
DataTable dt = new DataTable(name);

Program.TraceLine("Loading worksheet " + name);

for (int i = 0; i < numcols; i++)
{
Program.TraceLine("Creating column " + i.ToString());
dt.Columns.Add();
}

int rowid = 0;
foreach (Excel.Range row in worksheet.Rows)
{
Program.TraceLine("Creating row " + rowid.ToString());

DataRow dr = dt.NewRow();

int cellid = 0;
foreach (Excel.Range cell in row.Cells)
{
if (cell.Value != null)
dr[cellid] = cell.Value;

if (++cellid numcols)
break;
}

dt.Rows.Add(dr);

if (++rowid numrows)
break;
}

Program.TraceLine("Worksheet loaded");

return dt;
}
}



All times are GMT +1. The time now is 01:21 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com