如何将datagridview中数据导出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将datagridview中数据导出相关的知识,希望对你有一定的参考价值。

要求能让你自己选择导出的路径,文件名等 最好能多种格式的导出代码c#windows form

/// <summary>
///使用OLEDB方式读写Excel,不需要Office组件支持,后缀可以.xls ,.csv等
/// </summary>
class IOIEExcel

/******************************
* /// 本人的Excel导入导出方法有以下特色:
///1、使用OLEDB方式读写Excel,不需要Office组件支持;
///2、支持导入导出时进度条(ProgressBar);
///3、可以将本地DataSet中的数据类型转换为对应的OleDB的数据类型导出,使导出的数据区分开时间、数字、字符串,而不是像上一版中一样全是字符串;
///4、修正了Excel2003中某些工作薄名称为汉字的表无法正确识别的BUG
///5、删除了一个无用的方法GetFirstSheetName,本方法用于获取第一个工作薄的表明,一点用没有。
*
* *************************************/

/// <summary>
/// 获取链接字符串
/// </summary>
/// <param name="strFilePath"></param>
/// <returns></returns>
public static string GetExcelConnection(string strFilePath)

if (!File.Exists(strFilePath))

throw new Exception("指定的Excel文件不存在!");

return
@"Provider=Microsoft.Jet.OLEDB.4.0;" +
@"Data Source=" + strFilePath + ";" +
@"Extended Properties=" + Convert.ToChar(34).ToString() +
@"Excel 8.0;" + "Imex=2;HDR=Yes;" + Convert.ToChar(34).ToString();


/// <summary>
/// 返回指定文件所包含的工作簿列表;如果有WorkSheet,就返回以工作簿名字命名的ArrayList,否则返回空
/// </summary>
/// <param name="strFilePath">要获取的Excel</param>
/// <returns>如果有WorkSheet,就返回以工作簿名字命名的ArrayList,否则返回空</returns>
public static ArrayList GetExcelWorkSheets(string strFilePath)

ArrayList alTables = new ArrayList();

OleDbConnection odn = new OleDbConnection(GetExcelConnection(strFilePath));
odn.Open();

DataTable dt = new DataTable();

dt = odn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

if (dt == null)

throw new Exception("无法获取指定Excel的架构。");


foreach (DataRow dr in dt.Rows)

string tempName = dr["Table_Name"].ToString();

int iDolarIndex = tempName.IndexOf('$');

if (iDolarIndex > 0)

tempName = tempName.Substring(0, iDolarIndex);


//修正了Excel2003中某些工作薄名称为汉字的表无法正确识别的BUG。
if (tempName[0] == '\'')

if (tempName[tempName.Length - 1] == '\'')

tempName = tempName.Substring(1, tempName.Length - 2);

else

tempName = tempName.Substring(1, tempName.Length - 1);



if (!alTables.Contains(tempName))

alTables.Add(tempName);



odn.Close();

if (alTables.Count == 0)

return null;

return alTables;
参考技术A 你只要循环吧datagridview数据写入excel就可以了

class AppTest

private Excel.ApplicationClass _x;
public static void Main0()

AppTest a = new AppTest();
a._x = new Excel.ApplicationClass();
a._x.UserControl = false;
for (int i = 0 ;i < 4; i++)


a.SaveToXls( "D:\\test\\ " + i + ".xls "); // 本例是在D盘下建立的test文件夹

a._x.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject((object) a._x);
System.GC.Collect();


private void SaveToXls(string filename)

Excel.WorkbookClass wb = (Excel.WorkbookClass) this._x.Workbooks.Add(System.Reflection.Missing.Value);
for(int i = 1;i <= 4; i++)

this._x.Cells[i,1]=i.ToString();
this._x.Cells[i,2]= " 'bbb2 ";
this._x.Cells[i,3]= " 'ccc3 ";
this._x.Cells[i,4]= " 'aaa4 ";


wb.Saved = true;
this._x.ActiveWorkbook.SaveCopyAs(filename);



【注:在VS.Net中运行是要添加Excel.dll组件的,Excel组件VS.Net本身是没有的,下面是生成Excel.dll的方法。】

1.要保证机器本身要安装OFFICE.

2.把[C:\Program Files\Microsoft Office\Office:默认安装路径]下的EXCEL9.OLB文件拷贝到[C:\Visual Studio.Net\SDK\v1.1\Bin:VS.Net安装路径]路径下。

3.打开Visual Studio .Net2003命令提示,运行TlbImp Excel9.olb Excel.dll ,就会在[C:\Visual Studio.Net\SDK\v1.1\Bin]下生成Excel.dll组件。

4.在项目中添加Excel.dll引用就OK了。
参考技术B 我有这个实例,如果需要,采纳后发程序,万分感谢

如何在 VB.NET 中将 DataGridView 导出为 Excel 格式

【中文标题】如何在 VB.NET 中将 DataGridView 导出为 Excel 格式【英文标题】:How to export a DataGridView to Excel format in VB.NET 【发布时间】:2010-12-21 08:36:42 【问题描述】:

我正在使用 OLE 连接到使用 VB.NET 的数据库,并在 DataGridView 中显示结果。 我想将 DataGridView 中的数据导出为 Excel 格式文件,即 用户可以将 DataGridView 的内容保存为 MS Excel 文件。

【问题讨论】:

【参考方案1】:

我发现 copyfromrecordset 是最快的方法。

Dim xlApp As New Excel.Application
    Dim xlWBook As Excel.Workbook = xlApp.Workbooks.Add
    Dim XlSheet As Excel.Worksheet = CType(xlWBook.Worksheets("Sheet1"), Excel.Worksheet)
    With XlSheet
         'insert column names
        For i = 2 To dt.Columns.Count - 1
            .Cells(1, i).value = dt.Columns(i - 1).ColumnName
        Next
        'insert the actual data
        .Range("A2").CopyFromRecordset(datset)

    End With

【讨论】:

【参考方案2】:

最简单的方法是使用 microsoft.visualbasic.fileio (msdn link) 中的 textfieldparser 类。伪代码是:

创建一个 textfieldparser 对象,将文件设置为打开 (*.csv),并进行解码。

写列标题

遍历 datagridview 或其数据源 打印到文本文件

用户现在可以在 excel 中打开文件。

这是我的快速回答,我会看看是否有更好的方法。

【讨论】:

【参考方案3】:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 处理 Button1.Click DATAGRIDVIEW_TO_EXCEL((DataGridView1)) ' 参数:你的 DATAGRIDVIEW 结束子

Private Sub DATAGRIDVIEW_TO_EXCEL(ByVal DGV As DataGridView) 尝试 Dim DTB = 新数据表,RWS 作为整数,CLS 作为整数

    For CLS = 0 To DGV.ColumnCount - 1 ' COLUMNS OF DTB
        DTB.Columns.Add(DGV.Columns(CLS).Name.ToString)
    Next

    Dim DRW As DataRow

    For RWS = 0 To DGV.Rows.Count - 1 ' FILL DTB WITH DATAGRIDVIEW
        DRW = DTB.NewRow

        For CLS = 0 To DGV.ColumnCount - 1
            Try
                DRW(DTB.Columns(CLS).ColumnName.ToString) = DGV.Rows(RWS).Cells(CLS).Value.ToString
            Catch ex As Exception

            End Try
        Next

        DTB.Rows.Add(DRW)
    Next

    DTB.AcceptChanges()

    Dim DST As New DataSet
    DST.Tables.Add(DTB)
    Dim FLE As String = "" ' PATH AND FILE NAME WHERE THE XML WIL BE CREATED (EXEMPLE: C:\REPS\XML.xml)
    DTB.WriteXml(FLE)
    Dim EXL As String = "" ' PATH OF/ EXCEL.EXE IN YOUR MICROSOFT OFFICE
    Shell(Chr(34) & EXL & Chr(34) & " " & Chr(34) & FLE & Chr(34), vbNormalFocus) ' OPEN XML WITH EXCEL

Catch ex As Exception
    MsgBox(ex.ToString)
End Try

结束子

【讨论】:

【参考方案4】:

我测试了它并为我工作。

Dim xlApp As Microsoft.Office.Interop.Excel.Application
    Dim xlWorkBook As Microsoft.Office.Interop.Excel.Workbook
    Dim xlWorkSheet As Microsoft.Office.Interop.Excel.Worksheet
    Dim misValue As Object = System.Reflection.Missing.Value
    Dim i As Integer
    Dim j As Integer

    Try

        xlApp = New Microsoft.Office.Interop.Excel.Application
        xlApp.Application.DisplayAlerts = False
        xlWorkBook = xlApp.Workbooks.Add(misValue)
        xlWorkSheet = xlWorkBook.Sheets.Add()
        xlWorkSheet.Name = "MysqlSheet"

        For i = 0 To Form2.DataGridView2.RowCount - 1
            For j = 0 To Form2.DataGridView2.ColumnCount - 1
                For k As Integer = 1 To Form2.DataGridView2.Columns.Count
                    xlWorkSheet.Cells(1, k) = Form2.DataGridView2.Columns(k - 1).HeaderText
                    xlWorkSheet.Cells(i + 2, j + 1) = Form2.DataGridView2(j, i).Value
                Next
            Next
        Next

        xlWorkSheet.SaveAs("c:\")  'Where u want to save
        xlWorkBook.Close()
        xlApp.Quit()




    Catch ex As Exception
        MsgBox(ex.Message)
    Finally

    End Try

【讨论】:

以上是关于如何将datagridview中数据导出的主要内容,如果未能解决你的问题,请参考以下文章

各位仁兄,我想请教一下在C#winform中,datagridview如何导出excel文件,将excel导入datagridview.

DataGridview中的数据如何导出到Excel中

如何使用 Excel 对象将 DataGridView 数据导出到 Excel

如何将.net中DataGridView中的数据导出到Excel文本(是在windows窗体中)

如何在 VB.NET 中将 DataGridView 导出为 Excel 格式

如何将datagridview导出到Open Office Excel c#