Spreadsheetgear устанавливает флаги данных для определенного столбца?

#c# #excel #datatable #spreadsheetgear

#c# #excel #datatable #spreadsheetgear

Вопрос:

Я пытаюсь это сделать:

 IWorksheet worksheet = Factory.GetWorkbook().Worksheets[0];

IRange range = worksheet.Cells["A1"];

range.CopyFromDataTable(dataTable, SetDataFlags.None);

worksheet.Cells.Columns.AutoFit();
return worksheet;
  

Обычно это отлично работает, однако я столкнулся с проблемой. У меня есть один столбец с действительно длинным номером, возможно, с нулями спереди, и мне нужно, чтобы он был введен и отображен в виде текста. Если я выполняю поиск по этой конкретной ячейке, например:

 var cell = range["U34"].Value;
  

Данные уже переведены в научную нотацию, поэтому никакое последующее форматирование не исправит их. Я попробовал SetDataFlags.AllText и это отлично работает, за исключением того, что это нарушает остальную часть листа, потому что все числа хранятся в виде текста, что неприемлемо.

Я в недоумении, как это исправить.

Решение: поскольку я просто хочу изменить один столбец, если он присутствует, и многие столбцы являются динамическими, я выбрал маршрут «предварительного форматирования». Найдите индекс столбца из datatable:

 int ColumnIndex = -1;
        for (int x = 0; x < dataTable.Columns.Count; x  )
        {
            if (dataTable.Columns[x].ColumnName.Equals("Whatever"))
            {
                ColumnIndex = x;
            }
        }
worksheet.Cells[0, ColumnIndex, 0, ColumnIndex].EntireColumn.NumberFormat = "@";
  

Затем выполните CopyFromDataTable с флагами, установленными на None, и все идеально!

Ответ №1:

Диапазон.Метод CopyFromDataTable(…) может быть передан в SetDataFlags.Опция перечисления InsertCells, которая позволяет вам предварительно отформатировать диапазон назначения, чтобы вставленные данные, подлежащие обработке, соответствовали указанному вами форматированию. Это форматирование включает IRange ячейки.NumberFormat, который может быть установлен в «@» и указывает, что ввод в эту ячейку должен обрабатываться как текст.

Итак, если вы знаете, в каких столбцах будут эти необычно большие числа, которые запускают научную запись, другим вариантом было бы предварительно отформатировать диапазон назначения вашего листа с помощью IRange.NumberFormat = "@" и сохранить ваши значения для этих столбцов как есть.

Пожалуйста, ознакомьтесь с документацией для IRange.Метод CopyFromDataTable(…), поскольку он предоставляет важную информацию о том, какой диапазон нуждается в этом «предварительном форматировании». Кроме того, предполагая, что вы установили SpreadsheetGear на свой компьютер, ознакомьтесь с примером Reporting > DataSet to Workbook в решениях SpreadsheetGear Explorer для C # / VB (находится в папке «SpreadsheetGear» в меню «Пуск») для демонстрации этого SetDataFlags.Опция InsertCells.

Комментарии:

1. Я пошел по пути предварительного форматирования, поскольку я думаю, что это намного проще для моей ситуации. Спасибо за вашу помощь! Потрясающий продукт!