How to speed up this methods? It takes 10 seconds to read 5 files in given directory.I used this code for reading and merge it in one big excel file. When I add up to 100 files it takes about 10 minutes. Is there any tip to make it faster? Thanks in advance.
I used Microsoft.Office.Interop.Excel and ClosedXML.Excel.
Here's a sample of my code:
private DataTable DoExcel(string filePath) //method to read files
{
DataTable dt = new DataTable();
_Application excel = new _Excel.Application();
Workbook wb = excel.Application.Workbooks.Add();
try
{
wb = excel.Workbooks.Open(filePath);
Worksheet ws = (_Excel.Worksheet)wb.Worksheets.get_Item(1);
var Range = ws.UsedRange;
object[,] data = Range.Value2;
for (int cCnt = 1; cCnt <= Range.Columns.Count; cCnt++)
{
var Column = new DataColumn();
Column.DataType = System.Type.GetType("System.String");
Column.ColumnName = cCnt.ToString();
dt.Columns.Add(Column);
for (int rCnt = 3; rCnt <= Range.Rows.Count; rCnt++)
{
string cellVal = String.Empty;
try
{
cellVal = (data[rCnt, cCnt]).ToString();
}
catch (Microsoft.CSharp.RuntimeBinder.RuntimeBinderException)
{
var ConvertVal = (double)(data[rCnt, cCnt]);
cellVal = ConvertVal.ToString();
}
DataRow row;
if (cCnt == 1)
{
row = dt.NewRow();
row[cCnt.ToString()] = cellVal;
dt.Rows.Add(row);
}
else
{
row = dt.Rows[rCnt - 3];
row[cCnt.ToString()] = cellVal;
}//else
}//for
}
wb.Close(0);
excel.Quit();
}
catch (Exception ex)
{
wb.Close(0);
excel.Quit();
}
return dt;
}
public void MergeExcel() ////method to merge files
{
try
{
DataTable mainDt = new DataTable();
foreach (var file in System.IO.Directory.GetFiles(Sciezki.folderZPlikami))
{
var dt = DoExcel(file);
mainDt.Merge(dt);
}
using (var workbook = new XLWorkbook())
{
var worksheet = workbook.Worksheets.Add(mainDt, "AllData");
workbook.SaveAs(Sciezki.folderKoncowy + " " + Sciezki.dataZapisu + ".xlsx");
workbook.Dispose();
}
MessageBox.Show("finish");
}catch(Exception ex)
{
}
}
Thanks for help




