C # GemBox Excel Ошибка импорта - PullRequest
       19

C # GemBox Excel Ошибка импорта

1 голос
/ 09 ноября 2009

Я пытаюсь импортировать файл Excel в таблицу данных с помощью GemBox, и я получаю эту ошибку:

Недопустимое значение данных при извлечении в DataTable при SourceRowIndex: 1 и SourceColumnIndex: 1.

Насколько я могу судить, мой код правильный, и мой файл в порядке. У кого-нибудь есть идеи?

Спасибо.

ExcelWorksheet Ew = ExFi.Worksheets[0];

for (int i = 0; i < Ew.Columns.Count; ++i)
{
    if (Ew.Rows[0].Cells[0, i].Value != null)
        dsTable.Columns.Add(Ew.Rows[0].Cells[0, i].Value.ToString(), typeof(string));
}

try
{
    Ew.ExtractToDataTable(dsTable, Ew.Rows.Count, ExtractDataOptions.StopAtFirstEmptyRow, Ew.Rows[1], Ew.Columns[0]);
}

Ответы [ 3 ]

4 голосов
/ 02 марта 2010

Компонент GemBox.Spreadsheet автоматически не преобразует числа в строки в методе ExtractToDataTable ().

Это в основном из-за проблем культуры; кто-то ожидает, что число 12,4 преобразуется в «12,4», а кто-то - в «12,4».

Таким образом, если ваш файл Excel имеет ячейку со значением типа int, а соответствующий столбец имеет тип string -> будет сгенерировано исключение. Чтобы переопределить это, вы можете использовать ExcelWorksheet.ExtractDataEvent .

Вот образец:

// Create new ExcelFile
ExcelFile ef = new ExcelFile();

// Add sheet
ExcelWorksheet ws = ef.Worksheets.Add("Sheet1");
// Fill sheet
for (int i = 0; i < 5; i++)
{
    ws.Cells[i, 0].Value = i;   // integer value
    ws.Cells[i, 1].Value = "Row: " + i; // string value
}

// Initialize DataTable
DataTable dt = new DataTable();
dt.Columns.Add("id", typeof(string));
dt.Columns.Add("text", typeof(string));

// Manage ExtractDataError.WrongType error
ws.ExtractDataEvent += (sender, e) =>
{
    if (e.ErrorID == ExtractDataError.WrongType)
    {
        e.DataTableValue = e.ExcelValue == null ? null : e.ExcelValue.ToString();
        e.Action = ExtractDataEventAction.Continue;
    }
};

// Extract data to DataTable
ws.ExtractToDataTable(dt, 1000, ExtractDataOptions.StopAtFirstEmptyRow, ws.Rows[0], ws.Columns[0]);
1 голос
/ 16 февраля 2011

У меня возникла проблема, я преодолел ее, явно открыв ячейки таблицы

DataTable dtResult = new DataTable();
int nRows = ws.Rows.Count;
int nCols = 3; //change this according to number of columns in your sheet, for some reason ws.columns.count returns 0
for (int i = 0; i < nCols ; i++)
    dtResult.Columns.Add();

for (int i = 0; i < nRows; i++)
{
    if (ws.Cells[i, 0].Value != null)
        dtResult.Rows.Add(ws.Cells[i, 0].Value.ToString(), ws.Cells[i, 1].Value.ToString(), ws.Cells[i, 2].Value.ToString());
}

return dtResult;
0 голосов
/ 31 августа 2012

У меня была такая же проблема. Я использовал Typed DataSets, поэтому при попытке заполнить одну из моих таблиц у меня была эта ошибка.

Проблема здесь - десятичные числа в файле Excel. Сначала я присвоил столбцы с десятичными значениями System.Decimal, и эта ошибка была выдана.

Решение состоит в том, чтобы изменить тип столбца на System.Double. Зачем? Я не знаю, но это сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...