Сохраните таблицу данных в Excel в приложении WinMB vb.net - PullRequest
3 голосов
/ 20 августа 2009

Год назад я увидел красивый простой код, который получает таблицу данных и сохраняет ее в файле Excel.

Хитрость заключалась в том, чтобы использовать веб-библиотеку (что-то с http), и я почти уверен, что это был поток.

Я нашел много кода с ответом, но не могу заставить его работать в среде win-form. Также есть код за ячейкой - не интересно - слишком медленно.

Я хочу вставить его как диапазон или что-то близкое.

Спасибо

Ответы [ 5 ]

2 голосов
/ 20 августа 2009

Я считаю, что это код, который вы ищете:

DataTable в Excel

Используется HtmlTextWriter.

0 голосов
/ 20 августа 2009

Вам необходимо преобразовать вашу таблицу данных в набор записей ADO, а затем вы можете использовать метод CopyFromRecordset объекта Range. Смотри http://www.codeproject.com/KB/database/DataTableToRecordset.aspx

0 голосов
/ 20 августа 2009

Спасибо всем, особенно Джей

мой старый код, как вы и предложили:

по крайней мере, в следующий раз он будет ждать меня здесь;)

private void cmdSaveToExcel_Click(object sender, EventArgs e)
        {
            saveFileDialog1.Filter = "Excel (*.xls)|*.xls";
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                txtPath.Text = saveFileDialog1.FileName;               
            }

            // create the DataGrid and perform the databinding
            System.Web.UI.WebControls.DataGrid grid = new System.Web.UI.WebControls.DataGrid();
            grid.HeaderStyle.Font.Bold = true;


            if (connDBs != null && rtxtCode.Text != "")
            {
                DataTable dt;
                dt = connDBs.userQuery(rtxtCode.Text); // getting a table with one column of the databases names
                //grdData.DataSource = dt;
                grid.DataSource = dt;
                // grid.DataMember = data.Stats.TableName;

                grid.DataBind();

                // render the DataGrid control to a file
                using (StreamWriter sw = new StreamWriter(txtPath.Text))
                {
                    using (HtmlTextWriter hw = new HtmlTextWriter(sw))
                    {
                        grid.RenderControl(hw);
                    }
                }
                MessageBox.Show("The excel file was created successfully");
            }
            else
            {
                MessageBox.Show("Missing connection or query");
            }
        }
0 голосов
/ 20 августа 2009

Что мне нравится делать, так это помещать таблицу данных в сетку, позволяющую пользователю сортировать и фильтровать. Затем они могут использовать буфер обмена для копирования / вставки в Excel.

Private Sub mnuCopy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuCopy.Click
    If dgvDisplaySet.GetClipboardContent Is Nothing Then
        MsgBox("Nothing selected to copy to clipboard.")
    Else
        Clipboard.SetDataObject(dgvDisplaySet.GetClipboardContent)
    End If
End Sub
0 голосов
/ 20 августа 2009

Существует множество библиотек компонентов, которые предоставляют такую ​​функциональность.

Однако вы, вероятно, могли бы наиболее просто вывести данные в виде файла CSV и загрузить их в Excel.

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