Чтение данных строк из электронной таблицы
Используя инструменты SpreadSheetLight, я не могу найти способ чтения строк файла электронной таблицы. Конкретно лист 1.
У меня две проблемы
- Там нет никакого способа, которым я могу видеть, чтобы получить ряды
Я не вижу способа получить индекс столбца. Вот мой код
public void ParseExcelFile(FileInfo file) { using (SLDocument sl = new SLDocument()) { FileStream fs = new FileStream(file.FullName, FileMode.Open); MemoryStream msFirstPass = new MemoryStream(); SLDocument sheet1 = new SLDocument(fs, "Sheet1"); // There is no way that I can see to get the Rows foreach(var row in sheet1.Rows) { foreach(SLCell c in row) { // There is no way that I can see to get the Column Index switch(c.Column ) { case 1: //Handle data if cell is Column 1 break; case 2: //Handle data if cell is Column 2 break; case 3: //Handle data if cell is Column 3 break; } } } } }//func
3 ответа
Решение
Людям будет сложно ответить на этот вопрос, поскольку SpreadSheetLight, по-видимому, не имеет общедоступной документации по коду. У меня есть два предложения, основанные на нескольких предположениях:
- Есть ли у класса SLDocument.Row.SLCell свойство индекса? Если это так, вы можете получить необходимую информацию оттуда.
- Вы можете заменить свой foreach на for для отслеживания строки и столбца.
Код ниже будет читать каждую строку (при условии, что файл является путем к файлу Excel):
using (SLDocument sl = new SLDocument())
{
FileStream fs = new FileStream(file, FileMode.Open);
SLDocument sheet = new SLDocument(fs, "Table 1");
SLWorksheetStatistics stats = sheet.GetWorksheetStatistics();
for (int j = 1; j < stats.EndRowIndex; j++)
{
// Get the first column of the row (SLS is a 1-based index)
var value = sheet.GetCellValueAsString(j, 0);
}
}
string fileName = @"Test.xlsx";
using FileStream fs = new FileStream(fileName, FileMode.Open);
using SLDocument sl = new SLDocument(fs);
var worksheetNames = sl.GetWorksheetNames();
foreach (var worksheetName in worksheetNames)
{
sl.SelectWorksheet(worksheetName);
SLWorksheetStatistics stats = sl.GetWorksheetStatistics();
for (var i = 1; i <= stats.NumberOfRows; i++)
{
for (var j = 1; j <= stats.NumberOfColumns; j++)
{
var value = sl.GetCellValueAsString(i, j);
Console.WriteLine(value);
}
}
}