Перейти к содержимому

Как загрузить готовую таблицу excel в datagridview

  • автор:

Выгрузка таблицы dataGridView в Excel

Author24 — интернет-сервис помощи студентам

Создала приложение на C# для работы с большим массивом данных.
— Сначала в таблицу dataGridView загружаются документы Word и содержимое раскидывается по колонкам
— Затем таблица dataGridView выгружается в Excel.
Вопрос в том, что при выгрузке в Excel № почему-то выгружаются в формате даты (ставит мне дату, подходящую этому номеру).

? — Как установить формат ячеек в Excel через С#?
Таблицу я выгружаю всегда в новый документ Эксель, поэтому заранее отредактировать колонки не имею возможности.

Пробовала и так
sheet.get_Range(«A15», «B15»).NumberFormat = «# ##0,00»;
и так
sheet.get_Range(«A15», «B15»).NumberFormat = «0.00»;
Показывает вроде в другом формате, но совершенно другие цифры.

Или может есть что-типа того, чтобы оставлял цифры такими, какими они копируются?! (Как когда мы в экселе переносим ячейки с формулами, чтобы сохранить значения нажимаем — сохранить только значения, может и здесь что-то типа того)? Только как это на c# написал, это вопрос((

Номер выглядит так 1-10/2015

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Выгрузка таблицы dataGridView в Excel
Создала приложение на C# для работы с большим массивом данных. — Сначала в таблицу dataGridView.

Выгрузка из DataGridView в Excel
Всем доброго времени суток! Задался на работе целью, программку мелкую сделать, для упрощения.

Импорт из таблицы Excel в DataGridView
Ругается на строке dataGridView3.Rows.Add(1); словами: Дополнительные сведения: Невозможно добавить.

Экспорт таблицы из DataGridView в excel .xlsx
Как в Visual Studio 2017 можно реализовать экспорт из таблицы DataGridView в файл формата .xlsx.

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Выгрузка содержимого dataGridView в Excel
Находил вот этот пример на форуме, он работает, но в эксель записываются только значения столбцов и.

Выгрузка данных из таблицы Paradox в Excel
Здравствуйте, помогите пожалуйста, есть таблица Paradox — Посещаемость. В неё по кнопке добавляются.

Выгрузка данных из таблицы MS Access в MS excel
Добрый день , форумчане. Столкнулся с такой проблемой — имеется база данных, в ней несколько.

Выгрузка всех данных строки таблицы Access в файл Excel
Приветствую! Подскажите пожалуйста как сделать: Есть форма для заведения информации. Нужна.

Или воспользуйтесь поиском по форуму:

Shatunoff

Финальная часть проекта заключается в написании метода для сохранения данных из двух полученных dataGridView в файл XLS (MS Excel 2003). Для этого мы воспользуемся возможностями сторонней библиотеки ExcelLibrary. Также в этой части мы сохраним полученные в процессе работы программы логи в файл.

Собственно, вот сам код метода сохранения отчета в XLS-файл с помощью ExcelLibrary:

public void SaveReport(string pathToSaveRep) // Метод сохранения отчета в XLS-файл
<
progressBar.Value = 0;
progressBar.Minimum = 0;
progressBar.Maximum = dgvWorkTable.ColumnCount + dgvWorkTable.RowCount + dgvSummary.ColumnCount + dgvSummary.RowCount + 10;
DataSet ds = new DataSet();

DataTable Work = new DataTable(«Выгрузка»);
// Заполняем столбцы рабочей таблицы
for (int i = 0; i < dgvWorkTable.ColumnCount; i++)
<
Work.Columns.Add(dgvWorkTable.Columns[i].HeaderText);
progressBar.Value++;
>

// Заполняем строки рабочей таблицы
foreach (DataGridViewRow row in dgvWorkTable.Rows)
<
DataRow datarw = Work.NewRow();

for (int iCol = 0; iCol < dgvWorkTable.ColumnCount; iCol++)
<
datarw[iCol] = row.Cells[iCol].Value;
>

Work.Rows.Add(datarw);
progressBar.Value++;
>

Work.Columns[«Код АТЕ»].SetOrdinal(2);
Work.Columns[«Наименование АТЕ»].SetOrdinal(3);

DataTable Summary = new DataTable(«Сводная таблица»);
// Заполняем столбцы сводной таблицы
for (int i = 0; i < dgvSummary.ColumnCount; i++)
<
Summary.Columns.Add(dgvSummary.Columns[i].HeaderText);
progressBar.Value++;
>

// Заполняем строки сводной таблицы
foreach (DataGridViewRow row in dgvSummary.Rows)
<
DataRow datarw = Summary.NewRow();

for (int iCol = 0; iCol < dgvSummary.ColumnCount; iCol++)
<
datarw[iCol] = row.Cells[iCol].Value;
>

Summary.Rows.Add(datarw);
progressBar.Value++;
>
// Добавляем в DataSet полученные DataTable
ds.Tables.Add(Work);
ds.Tables.Add(Summary);
// Используем библиотеку ExcelLibrary для экспорта в XLS файл
DataSetHelper.CreateWorkbook(pathToSaveRep, ds);

progressBar.Value += 10;
tbLogs.Text += Environment.NewLine + Environment.NewLine + DateTime.Now + «: Отчет успешно сохранен: » + pathToSaveRep;
>

Алгоритм работы кода:

  • Метод принимает один аргумент типа string , который должен содержать путь для сохранения файла.
  • Устанавливаем значения для progressBar (Максимальное значение берется из суммарного количества итераций циклов по dataGridView в теле метода + 10 для сохранения DataSet в файл XLS).
  • Инициализируем экземпляр DataSet.
  • Инициализируем DataTable Work для таблицы обработки выгрузки, в конструкторе экземпляра даем имя таблице «Выгрузка» — имя будет использовано как имя листа в книге Excel.
  • С помощью цикла for копируем столбцы из dgvWork в DataTable Work, а с при помощи цикла foreach копируем все строки dataGridView в DataTable .
  • С помощью метода SetOrdinal() переносим столбцы с кодом и наименованием района на нужные нам индексы.
  • Аналогичным образом создаем DataTable для сводной таблицы и заносим в неё данные.
  • Добавляем полученные DataTable в DataSet .
  • Используем метод DataSetHelper.CreateWorkbook() библиотеки ExcelLibrary для создания XLS-файла и заполнения его содержимым DataSet .
  • Отписываемся в tbLogs об успешном сохранении отчета с указанием пути к нему.

Для кнопки сохранения отчета пишем следующий код:
private void butSaveReport_Click(object sender, EventArgs e) // Сохранение отчета
SaveFileDialog saveRep = new SaveFileDialog();
saveRep.Filter = «Файл Excel (2003) |*.xls»;
saveRep.Title = «Сохранить отчет в файл»;
saveRep.FileName = «Отчет от » + DateTime.Today.ToShortDateString();
if (saveRep.ShowDialog() == DialogResult.OK) SaveReport(saveRep.FileName);

Теперь программа умеет сохранять созданный отчет и основная работа над ней закончена. На случай, если при разработке я чего-то не предусмотрел и всегда можно было отследить ошибку — я создал вкладку с textBox , в который записываются все действия в приложении за последнюю сессию, а также это поле полезно и для простого пользователя, так как приложение мгновенно в него напишет, если возникли проблемы с целостностью. Тем не менее, логи не полноценны, если они не сохраняются автоматически. Для этого было решено создать событие перед закрытием MainForm :

private void MainForm_FormClosing(object sender, FormClosingEventArgs e) // Событие при закрытии программы (ДО закрытия формы)

// Создаем/Перезаписываем файл logs.txt в корневой папке программы с данными о прошедшей сессии.

FileStream stream = File.Open(Application.StartupPath + «\\logs.txt», FileMode.Create, FileAccess.ReadWrite);

StreamWriter write = new StreamWriter(stream, Encoding.Default);
write.Write(tbLogs.Text);
write.Close();
stream.Close();

Данный код создает (либо перезаписывает) файл logs.txt в корневой папке приложения в конце каждой сессии работы с программой.

Для создания формы с информацией о программе была использована готовая форма «AboutBox», доступная для создания любому пользователю студии. Все данные для нее берутся из свойств проекта.

На этом создание проекта завершается. Спасибо за внимание! Готовый проект, как всегда, можно скачать на соответствующей странице блога.

Экспорт данных из файла Excel в DataGridView [закрыт]

Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

Вопросы с просьбами помочь с отладкой («почему этот код не работает?») должны включать желаемое поведение, конкретную проблему или ошибку и минимальный код для её воспроизведения прямо в вопросе. Вопросы без явного описания проблемы бесполезны для остальных посетителей. См. Как создать минимальный, самодостаточный и воспроизводимый пример.

Закрыт 5 лет назад .

Нашел код для загрузки данных Excel в таблицу DataGridView:

private void завантажитиToolStripMenuItem_Click_1(object sender, EventArgs e) < < < OpenFileDialog ofd = new OpenFileDialog(); ofd.DefaultExt = "*.xls;*.xlsx"; ofd.Filter = "Microsoft Excel (*.xls*)|*.xls*"; ofd.Title = "Выберите документ для загрузки данных"; if (ofd.ShowDialog() != DialogResult.OK) < MessageBox.Show("Вы не выбрали файл для открытия", "Загрузка данных. ", MessageBoxButtons.OK, MessageBoxIcon.Error); return; >String constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ofd.FileName + ";Extended Properties='Excel 12.0 XML;HDR=YES;IMEX=1';"; System.Data.OleDb.OleDbConnection con = new System.Data.OleDb.OleDbConnection(constr); con.Open(); DataSet ds = new DataSet(); DataTable schemaTable = con.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] < null, null, null, "TABLE" >); string sheet1 = (string)schemaTable.Rows[0].ItemArray[2]; string select = String.Format("SELECT * FROM []", sheet1); System.Data.OleDb.OleDbDataAdapter ad = new System.Data.OleDb.OleDbDataAdapter(select, con); ad.Fill(ds); DataTable dt = ds.Tables[0]; con.Close(); con.Dispose(); dataGridView1.DataSource = dt; > 

Все работает, но к уже готовой таблице DataGridView добавляет еще одну таблицу со смещение данных вправо.

Изменение размеров управления DataGridView в Windows Forms

Размер строк, столбцов и заголовков DataGridView изменяется в результате различных событий. Эти события рассмотрены в следующей таблице.

Вхождение Description
Изменение размера пользователем Для изменения размера пользователи могут перетащить или дважды щелкнуть разделители строк, столбцов или заголовков.
Изменение размера элемента управления В режиме заполнения столбцов ширина столбцов изменяется при изменении ширины элемента управления. Например, если элемент управления прикреплен к своей родительской форме, и пользователь изменяет размер формы.
Изменение значения ячейки В режимах автоматического изменения размера на основе содержимого размеры изменяются в соответствии с новыми отображаемыми значениями.
Вызов метода Изменение размера на основе программного содержимого позволяет нежестким образом корректировать размер на основе значений ячеек во время вызова метода.
Задание параметра свойства Также можно задать конкретные значения для высоты и ширины.

По умолчанию изменение пользователем размера включено, автоматическое изменение размера отключено, а значения ячеек, ширина которых превышает их столбцы, обрезаются.

В следующей таблице показаны сценарии, которые можно использовать для настройки поведения по умолчанию или использования определенных параметров изменения размера для достижения определенных эффектов.

Сценарий Внедрение
Используйте режим заполнения столбцов для отображения данных аналогичного размера в относительно небольшом количестве столбцов, которые занимают всю ширину элемента управления без отображения горизонтальной полосы прокрутки. Установите свойство AutoSizeColumnsMode в значение Fill.
Используйте режим заполнения столбцов с отображаемыми значениями различного размера. Установите свойство AutoSizeColumnsMode в значение Fill. Инициализируйте относительные ширины столбцов путем задания свойств FillWeight столбца или вызова метода AutoResizeColumns управления после заполнения данными элемента управления.
Используйте режим заполнения столбцов со значениями разной степени важности. Установите свойство AutoSizeColumnsMode в значение Fill. Задайте более крупные значения MinimumWidth для столбцов, которые всегда должны отображать некоторые данные, или используйте параметр изменения размера, отличный от режима заполнения для определенных столбцов.
Чтобы предотвратить отображение фона элемента управления, используйте режим заполнения столбцов. Задайте для свойства AutoSizeMode последнего столбца значение Fill и используйте другие параметры изменения размера для других столбцов. Если другие столбцы используют слишком много доступного пространства, задайте свойство MinimumWidth последнего столбца.
Отображение столбца фиксированной ширины, например значка или столбца идентификатора. Задайте для AutoSizeMode значение None и для Resizable значение False для столбца. Инициализируйте его ширину, задав свойство Width или вызвав метод AutoResizeColumn элемента управления после заполнения элемента управления данными.
Всегда автоматически изменяйте размеры при изменении содержимого ячейки, чтобы избежать обрезки и оптимизировать использование пространства. Задайте для свойства автоматического изменения размера значение, представляющее режим изменения размера на основе содержимого. Чтобы избежать снижения производительности при работе с большими объемами данных, используйте режим изменения размера, который вычисляет только отображаемые строки.
Настраивайте размеры в соответствии со значениями в отображаемых строках, чтобы избежать снижения производительности при работе с большим количеством строк. Используйте соответствующие значения перечисления в режиме изменения размера с автоматическим или программным изменением размера. Чтобы настроить размеры в соответствии со значениями в недавно отображаемых строках во время прокрутки, вызовите метод изменения размера в обработчике событий Scroll. Чтобы настроить изменение размера при двойном щелчке пользователя, чтобы только значения в отображаемых строках определяли новые размеры, вызовите метод изменения размера в обработчике событий RowDividerDoubleClick или ColumnDividerDoubleClick.
Настраивайте размеры в соответствии с содержимым ячейки только в определенное время, чтобы избежать снижения производительности или включить изменение размера пользователем. Вызовите метод изменения размера на основе содержимого в обработчике событий. Например, используйте событие DataBindingComplete для инициализации размеров после привязки и обрабатывайте события CellValidated или CellValueChanged для изменения размеров, чтобы компенсировать изменения, вносимые пользователем в привязанном источнике данных.
Настройте высоту строк для содержимого многострочных ячеек. Убедитесь, что ширина столбцов подходит для отображения абзацев текста и используйте автоматическое или программное определение размера строк на основе содержимого для настройки высоты. Кроме того, убедитесь, что ячейки с многострочным содержимым отображаются при использовании значения стиля ячейки WrapMode, равного True.

Изменение размера с помощью мыши

По умолчанию пользователи могут изменять размер строк, столбцов и заголовков, для которых автоматический режим изменения размера на основе значений ячеек не используется. Чтобы пользователи не изменяли размер с помощью других режимов, таких как режим заполнения столбцов, задайте одно или несколько из следующих свойств DataGridView:

  • AllowUserToResizeColumns
  • AllowUserToResizeRows
  • ColumnHeadersHeightSizeMode
  • RowHeadersWidthSizeMode

Чтобы пользователи также не могли изменить размер отдельных строк или столбцов, задайте их свойства Resizable. По умолчанию значение свойства Resizable основано на значении свойства AllowUserToResizeColumns для столбцов и значении свойства AllowUserToResizeRows для строк. Однако, если для Resizable явно задано значение True или False, это значение переопределяет значение элемента управления для данной строки или столбца. Для восстановления наследования задайте для Resizable значение NotSet.

Так как NotSet восстанавливает наследование значений, свойство Resizable никогда не будет возвращать значение NotSet, если в элемент управления DataGridView не добавлена строка или столбец. Если необходимо определить, наследуется ли значение свойства Resizable для строки или столбца, проверьте его свойство State. Если значение State содержит флаг ResizableSet, значение свойства Resizable не наследуется.

Автоматическое изменение размеров

В элементе управления DataGridView поддерживаются два способа автоматического изменения размера: режим заполнения столбцов и автоматическое изменение размера на основе содержимого.

В режиме заполнения столбцов видимые столбцы в элементе управления заполняют ширину области отображения элемента управления. Дополнительные сведения об этом режиме см. в разделе Режим заполнения столбцов в элементе управления DataGridView в Windows Forms.

Также можно настроить строки, столбцы и заголовки для автоматической настройки их размеров в соответствии с их содержимым ячеек. В этом случае изменение размера происходит при каждом изменении содержимого ячейки.

Если значения ячеек в настраиваемом кэше данных поддерживаются с помощью виртуального режима, автоматическое изменение размера происходит, когда пользователь изменяет значение ячейки, и не происходит в случае изменения кэшированного значения за пределами обработчика событий CellValuePushed. В этом случае необходимо вызвать метод UpdateCellValue, чтобы принудительно обновить в элементе управления отображение ячейки и применить текущие режимы автоматического изменения размера.

Если автоматическое изменение размера на основе содержимого включено только для одного измерения (то есть, для строк, но не столбцов или для столбцов, но не строк), и также включен WrapMode, изменение размера также происходит при каждом изменении другого измерения. Например, если строки, но не столбцы, настроены для автоматического изменения размера, и включен WrapMode, пользователи могут перетащить разделители столбцов, чтобы изменить ширину столбца, а высота строк будет корректироваться автоматически, чтобы содержимое ячейки по-прежнему отображалось полностью.

Если выполняется настройка как строк, так и столбцов для автоматического изменения размера на основе содержимого, и WrapMode включен, то элемент управления DataGridView будет корректировать размеры при каждом изменении содержимого ячейки и будет использовать идеальное соотношение высоты и ширины ячеек при вычислении новых размеров.

Чтобы настроить режим изменения размера для заголовков и строк, а также для столбцов, которые не переопределяют значение элемента управления, задайте одно или несколько следующих свойств DataGridView:

  • ColumnHeadersHeightSizeMode
  • RowHeadersWidthSizeMode
  • AutoSizeColumnsMode
  • AutoSizeRowsMode

Чтобы переопределить режим изменения размера отдельного столбца для элемента управления, задайте для его свойства AutoSizeMode значение, отличное от NotSet. Режим изменения размера для столбца фактически определяется его свойством InheritedAutoSizeMode. Значение этого свойства основано на значении свойства AutoSizeMode столбца, если только данное значение не равно NotSet. В таком случае значение AutoSizeColumnsMode элемента управления наследуется.

При работе с большими объемами данных используйте автоматическое изменение размера на основе содержимого с осторожностью. Чтобы избежать снижения производительности, используйте режимы автоматического изменения размера, которые вычисляют размеры только на основе отображаемых строк, а не анализируют каждую строку в элементе управления. Для обеспечения максимальной производительности используйте программное изменение размера, чтобы размер можно было изменять в определенное время, например, сразу после загрузки новых данных.

Режимы автоматического изменения размера на основе содержимого не влияют на строки, столбцы или заголовки, которые были скрыты путем задания значения false для свойства Visible строки или столбца, или свойств RowHeadersVisible или ColumnHeadersVisible элемента управления. Например, если столбец скрыт после автоматического изменения его размера в соответствии с более высоким значением ячейки, скрытый столбец не изменит свой размер, если строка, содержащая большее значение ячейки, будет удалена. Автоматическое изменение размера не выполняется при изменении видимости, поэтому возврат свойства столбца Visible к значению true не приведет к повторному вычислению его размера на основе текущего содержимого.

Программное изменение размера на основе содержимого влияет на строки, столбцы и заголовки независимо от их видимости.

Программное изменение размера

Если автоматическое изменение размера отключено, точную ширину или высоту строк, столбцов или заголовков можно задать программно с помощью следующих свойств.

  • DataGridView.RowHeadersWidth
  • DataGridView.ColumnHeadersHeight
  • DataGridViewRow.Height
  • DataGridViewColumn.Width

Также программно можно изменять размер строк, столбцов и заголовков, чтобы они соответствовали своему содержимому, с помощью следующих методов.

  • AutoResizeColumn
  • AutoResizeColumns
  • AutoResizeColumnHeadersHeight
  • AutoResizeRow
  • AutoResizeRows
  • AutoResizeRowHeadersWidth

Эти методы позволят сразу изменить размер строк, столбцов или заголовков. Их не нужно будет настраивать для непрерывного изменения размера. Новые размеры автоматически вычисляются для отображения всего содержимого ячейки без обрезки. Однако при программном изменении размера столбцов, свойства InheritedAutoSizeMode которых имеют значение Fill, вычисляемая ширина на основе содержимого используется для пропорциональной корректировки значений свойств FillWeight столбца, а фактическая ширина столбцов затем вычисляется в соответствии с этими новыми пропорциями, чтобы все столбцы заполняли доступную область отображения элемента управления.

Программное изменение размера полезно для предотвращения снижения производительности при непрерывном изменении размера. Также полезно указать начальные размеры для строк, столбцов и заголовков, размер которых изменяется пользователем, а также для режима заполнения столбцов.

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

Настройка поведения изменения размера на основе содержимого

Поведение изменения размера можно настроить при работе с производными типами ячеек, строк и столбцов DataGridView путем переопределения методов DataGridViewCell.GetPreferredSize, DataGridViewRow.GetPreferredHeight или DataGridViewColumn.GetPreferredWidth, либо посредством вызова перегрузок защищенных методов изменения размера в производном элементе управления DataGridView. Перегрузки защищенных методов изменения размера предназначены для работы в парах для достижения идеального соотношения высоты и ширины ячейки, что позволяет избежать появления чрезмерно широких или высоких ячеек. Например, в случае вызова перегрузки AutoResizeRows(DataGridViewAutoSizeRowsMode,Boolean) метода AutoResizeRows и передачи значения false для параметра Boolean, перегрузка вычислит идеальную высоту и ширину для ячеек в строке, но изменит только высоту строк. Затем для настройки ширины столбца в соответствии с вычисляемым идеальным вариантом необходимо вызвать метод AutoResizeColumns.

Параметры определения размера на основе содержимого

Перечисления, используемые свойствами и методами изменения размера, имеют похожие значения для определения размера на основе содержимого. С помощью этих значений можно указать, какие ячейки могут использоваться для вычисления предпочтительных размеров. Для всех перечислений при определении размера значения с именами, ссылающимися на отображаемые ячейки, позволят выбрать для вычисления только ячейки в отображаемых строках. Исключение строк полезно для предотвращения снижения производительности при работе с большим количеством строк. Также вычисления можно выполнять только для значений ячеек в ячейках заголовка или ячейках, не относящихся к заголовку.

См. также

  • DataGridView
  • DataGridView.AllowUserToResizeColumns
  • DataGridView.AllowUserToResizeRows
  • DataGridView.ColumnHeadersHeightSizeMode
  • DataGridView.RowHeadersWidthSizeMode
  • DataGridViewBand.Resizable
  • DataGridView.AutoSizeColumnsMode
  • DataGridView.AutoSizeRowsMode
  • DataGridViewColumn.AutoSizeMode
  • DataGridViewColumn.InheritedAutoSizeMode
  • DataGridView.RowHeadersWidth
  • DataGridView.ColumnHeadersHeight
  • DataGridViewRow.Height
  • DataGridViewColumn.Width
  • DataGridView.AutoResizeColumn
  • DataGridView.AutoResizeColumns
  • DataGridView.AutoResizeColumnHeadersHeight
  • DataGridView.AutoResizeRow
  • DataGridView.AutoResizeRows
  • DataGridView.AutoResizeRowHeadersWidth
  • DataGridViewAutoSizeRowMode
  • DataGridViewAutoSizeRowsMode
  • DataGridViewAutoSizeColumnMode
  • DataGridViewAutoSizeColumnsMode
  • DataGridViewColumnHeadersHeightSizeMode
  • DataGridViewRowHeadersWidthSizeMode
  • Изменение размера столбцов и строк элемента управления DataGridView в Windows Forms
  • Установка режимов заполнения для столбцов элемента управления DataGridView в Windows Forms
  • Практическое руководство. Режимы изменения размеров элемента управления DataGridView в Windows Forms

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *