Входная строка имела неверный формат double value
Имею сайт с БД. При выгрузке таблицы в Эксель выводится ошибка
Входная строка имела неверный формат
if (ds.Tables[dtRz.Rows[r]["razdel"].ToString()].Rows[i][j].ToString().Replace("," , ".") != "") // Строка 6188
{ // Строка 6189
double value = Convert.ToDouble(ds.Tables[dtRz.Rows[r]["razdel"].ToString()].Rows[i][j].ToString().Replace(",", "."), NumberFormatInfo.InvariantInfo); // Строка 6190
xlWorkSheet.Cells[max_row_span + 1 + i, j - 2].Value = value; // Строка 6191
} // Строка 6192
В чем может быть проблема?
Проблема решена кодом:
if (double.TryParse(ds.Tables[dtRz.Rows[r]["razdel"].ToString()].Rows[i][j].ToString().Trim(), out doubleValue))
{
xlWorkSheet.Cells[max_row_span + 1 + i, j - 2].Value = doubleValue;
}
else xlWorkSheet.Cells[max_row_span + 1 + i, j - 2].Value = null;
}
Ответы (2 шт):
Сначала вам нужно проверить ячейку на пустоту, это делается с помощью метода string.IsNullOrWhiteSpace(). После, если строка не null и не содержит пробелы, вам необходимо считать значение с нее и убрать все лишние пробелы. Также необходимо заменить "Точку" в числе на "Запятую" и после уже конвертировать полученное значение в double. Вот пример с вашим кодом:
if (!string.IsNullOrWhiteSpace(ds.Tables[dtRz.Rows[r]["razdel"].ToString()].Rows[i][j].ToString())) // Если строка не пустая и не состоит только из пробелов
{
// Считываем значение из ячейки, заменяем точку на запятую и убираем лишние пробелы
var cellValue = ds.Tables[dtRz.Rows[r]["razdel"].ToString()].Rows[i][j].ToString().Replace(".", ",").Trim();
// Конвертируем в double
double value = Convert.ToDouble(cellValue, NumberFormatInfo.InvariantInfo);
xlWorkSheet.Cells[max_row_span + 1 + i, j - 2].Value = value;
}
Проблема в точке, которую вы ставите вместо запятой.
Как я понимаю, это для того чтобы понять, входная строка является ли числом типа double.
Думаю целесообразнее использовать double.TryParse().
- Это вас избавит от выброса исключения при конвертировании
- Это гарантирует выполнение кода в случае, если входная строка действительно число.
- Вы всегда можете использовать блок
else
if(double.TryParse(ds.Tables[dtRz.Rows[r]["razdel"].ToString()].Rows[i][j].ToString().Trim(), out double value))
{
xlWorkSheet.Cells[max_row_span + 1 + i, j - 2].Value = value;
}
else
{
xlWorkSheet.Cells[max_row_span + 1 + i, j - 2].Value = string.Empty; // к примеру
}
Подробнее о методе double.TryParse() можете почитать тут https://docs.microsoft.com/en-us/dotnet/api/system.double.tryparse?view=netcore-3.1