Я хотел бы получить некоторые рекомендации о том, как читать большие объемы данных, которые находятся в нескольких файлах Excel. Я был в состоянии написать программу, которая отвечает основным требованиям, но она работает очень медленно! Я уверен, что мой код неэффективен, поэтому некоторые отзывы о том, как сделать это быстрее, были бы очень полезны. Вот детали и цель программы, которую я должен написать.
- У меня есть 4 отдельных файла Excel, которые содержат где-то между 92-250 столбцами и 376-450 строками (каждый).
- Моя программа должна пройти через каждый файл в поисках CELL со значениями между C1-C50 (C1, C2, C3, C4 .... C49, C50 и т. Д.)
- Когда мойПрограмма находит ячейку, значение которой находится между C1-C50, и должна принимать значение ниже ячейки, в которой была найдена C1-C50. Другими словами, если я найду ячейку со значением C20, то ячейка ниже C20 - это то значение, которое мне нужно (мне нужно повторить этот процесс, сколько строк в файлах Excel)
Я должен взять значение и добавить его к ключу «значение». Результат должен выглядеть примерно так, как показано ниже. JSON.
{
"_id" : ObjectId("145566"),
"SimulatorId" : "4519656",
"ThingNo" : "1265556",
"CustomerID" : null,
"ApplicationID" : "",
"Interval" : 300,
"Complete" : 111,
"Remaining" : -1,
"ProductType" : "SomeProduct",
"SimulatedData" : [
{
"value" : 1819.00923045901,
"units" : "hp",
"tag" : "comp/totalIhp",
"name" : "Compressor - Total IHP"
},
{
"value" : 789.294125,
"units" : "RPM",
"tag" : "comp/averageSpeed",
"name" : "Compressor - Speed"
},
{
"value" : 2064.74658240481,
"units" : "hp",
"tag" : "comp/totalBhp",
"name" : "Compressor - Total BHP"
},
{
"value" : 98.7147413187277,
"units" : "%",
"tag" : "comp/percentCurrentLoad",
"name" : "Compressor - Percent load"
},
{
"value" : 12.18477402334,
"units" : "MMSCFD",
"tag" : "comp/totalCapacity",
"name" : "Compressor - Total capacity"
},
{
"value" : null,
"tag" : "comp/bsfcCompressorBased",
"name" : "Compressor - BSFC"
},
Ниже приведен код, который я использовал. Но опять же, это очень медленно.
Program.cs
class Program
{
private static String[] file = new String[] {"prod_comp", "prod_he", "prod_ce", "prod_cyl" };
public static void Main(String [] args)
{
for (int x = 0; x < file.Length; x ++)
{
string filepath = @"C:\Users\user\Test\SimRunnerData\" + file[x];
Excel excel = new Excel(filepath, 1);
excel.ReadSheet();
//excel.SearchSheet();
}
}
}
Excel.cs
class Excel
{
string path = "";
_Application excel = new _Excel.Application();
Workbook wb;
Worksheet ws;
public Excel(string path, int sheet)
{
this.path = path;
wb = excel.Workbooks.Open(path);
ws = wb.Worksheets[sheet];
}
public void ReadSheet()
{
Console.WriteLine("Reading file: " + path);
for (int x = 1; x < 51; x++)
{
//Setting the channel we are looking for
string channel = "C" + Convert.ToString(x);
//Get column count for worksheet
int colCount = ws.UsedRange.Columns.Count;
//Begin loop through column length to find channel ID in row 1
for(int j = 1; j < colCount; j++)
{
string cellValue = ws.Cells[1, j].Value2;
if (cellValue == channel)
{
double? value = ws.Cells[2, j].Value2;
if(value is double)
{
Console.WriteLine(channel + ": " + value);
}
else
{
Console.WriteLine(channel + ": " + "null");
}
break;
}
}
}
}
}