Можно ли читать данные Excel из указанных ячеек c, используя PX.Data.XLSXReader?
Да, можно получить указанную ячейку c строки используя метод GetValue
, как в вашем примере.
Невозможно иметь произвольный доступ к строкам, так как они используют IEnumerator:
IEnumerator<Worksheet.Row> _rowIterator;
Однако первая строка - это особый случай, который доступ через свойство IndexKeyPairs
.
Кроме того, я заметил, что когда я не включаю […], код не повторяется с
Доступ к Свойство IndexKeyPairs
имеет побочный эффект назначения приватного члена _keys
. Возможно, этот побочный эффект меняет поведение класса XLSXReader
.
public IDictionary<int, string> IndexKeyPairs
{
get
{
if (_keys == null)
{
_keys = new Dictionary<int, string>();
if (_headerRow != null)
foreach (Worksheet.Cell cell in _headerRow.Cells)
_keys.Add(new KeyValuePair<int, string>(cell.Address.Column, GetValue(cell)));
}
return _keys;
}
}
Я думаю об управлении библиотекой с большей гибкостью - если возможно.
Библиотека была оптимизирована для скорости, которая требует последовательного итератора вместо произвольного доступа. Это может быть не так удобно, но метод MoveNext
предназначен для быстрой работы. Чтобы получить доступ к указанной строке c, вызовите метод Reset
, чтобы сбросить итератор, и несколько раз вызывайте MoveNext
, пока не будет достигнута целевая строка.
Чтобы оценить доступные функции, предоставляемые классом XLSXReader
, найдите интерфейс IContentReader
:
public interface IContentReader : IDisposable
{
/// <summary>
/// Move to next record in data source
/// </summary>
/// <returns>true, if the operation was performed successfully</returns>
bool MoveNext();
/// <summary>
/// Find value in record by given key index
/// </summary>
/// <param name="index">index of value</param>
/// <returns>null, if given key index was not found</returns>
string GetValue(int index);
/// <summary>
/// Reset state of reader
/// </summary>
void Reset();
/// <summary>
/// Collection of value keys
/// </summary>
IDictionary<int, string> IndexKeyPairs { get; }
}