楼主: charles_gao

[.Net]如何向DataGrid导入Excel文件?

[复制链接]
论坛徽章:
12
授权会员
日期:2006-04-10 23:53:59会员2006贡献徽章
日期:2006-04-17 13:46:34开发板块每日发贴之星
日期:2006-10-09 01:03:11
11#
 楼主| 发表于 2006-3-8 13:18 | 只看该作者
因为Excel文档已经确定下来,不可能变更,所以oledb行不通!
按照道理,得到Excel的对象,然后得到某些cell的值应该可行啊!

使用道具 举报

回复
招聘 : 产品经理/专员
论坛徽章:
67
管理团队2006纪念徽章
日期:2006-04-16 22:44:452012新春纪念徽章
日期:2012-01-04 11:50:442012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25版主1段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24夏利
日期:2013-10-10 13:12:33
12#
发表于 2006-3-8 17:15 | 只看该作者
刚做完测试:
First, the Excel assembly must be added to the project. To do this you must add a reference to the Excel 10 Object Library (Excel XP) by going to the Project -> Add Reference  menu item. Go to the COM tab of the dialog box that pops up and scroll down the Excel 10 Object Library. Double click on it and press OK. This adds the reference to your project. In the "using" section of your code, type
[PHP]
using Excel;
.....


private void button1_Click(object sender, System.EventArgs e)
{
  Excel.Application excelApp = new Excel.ApplicationClass();
  excelApp.Visible = true;
  Excel.Workbook newWorkbook = excelApp.Workbooks.Add (XlWBATemplate.xlWBATWorksheet);
  string workbookPath = "d:/zy.xls";
  Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(workbookPath,0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "",
  true, false, 0, true, false, false);
Excel.Sheets excelSheets = excelWorkbook.Worksheets;
string currentSheet = "Sheet2";
Excel.Worksheet excelWorksheet = (Excel.Worksheet)excelSheets.get_Item(currentSheet);
Excel.Range excelCell = (Excel.Range)excelWorksheet.get_Range("A1", "A1";
MessageBox.Show(excelCell.Text.ToString());
}
[/PHP]
你直接把代码考过去就明白了

这里有一些英文文档,你看一下


http://www.codeproject.com/csharp/csharp_excel.asp

使用道具 举报

回复
论坛徽章:
12
授权会员
日期:2006-04-10 23:53:59会员2006贡献徽章
日期:2006-04-17 13:46:34开发板块每日发贴之星
日期:2006-10-09 01:03:11
13#
 楼主| 发表于 2006-3-8 17:20 | 只看该作者
非常感谢!
我试一下!

使用道具 举报

回复
招聘 : 产品经理/专员
论坛徽章:
67
管理团队2006纪念徽章
日期:2006-04-16 22:44:452012新春纪念徽章
日期:2012-01-04 11:50:442012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25版主1段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24夏利
日期:2013-10-10 13:12:33
14#
发表于 2006-3-8 21:18 | 只看该作者
最初由 charles_gao 发布
[B]非常感谢!
我试一下! [/B]



互相交流,希望我们一起把版块带起来

使用道具 举报

回复
论坛徽章:
12
授权会员
日期:2006-04-10 23:53:59会员2006贡献徽章
日期:2006-04-17 13:46:34开发板块每日发贴之星
日期:2006-10-09 01:03:11
15#
 楼主| 发表于 2006-3-9 11:04 | 只看该作者
问题已解决!

赵宇,非常感谢!

使用道具 举报

回复
论坛徽章:
12
授权会员
日期:2006-04-10 23:53:59会员2006贡献徽章
日期:2006-04-17 13:46:34开发板块每日发贴之星
日期:2006-10-09 01:03:11
16#
 楼主| 发表于 2006-3-9 11:07 | 只看该作者
原因在于
以前用xlSheet.Cells(I, J)来定位一个单元格,
但到了.net中,好象不行了,得采用你的那种方式:excelWorksheet.get_Range("A1", "A1".Text;
为了便于调用,我改成了:xlSheet.Range(xlSheet.Cells(I, J), xlSheet.Cells(I, J)).Text,也可以使用!

使用道具 举报

回复
论坛徽章:
12
授权会员
日期:2006-04-10 23:53:59会员2006贡献徽章
日期:2006-04-17 13:46:34开发板块每日发贴之星
日期:2006-10-09 01:03:11
17#
 楼主| 发表于 2006-3-9 11:09 | 只看该作者
最初由 赵宇 发布
[B]


互相交流,希望我们一起把版块带起来 [/B]


是的,大家一起努力!

使用道具 举报

回复
论坛徽章:
12
授权会员
日期:2006-04-10 23:53:59会员2006贡献徽章
日期:2006-04-17 13:46:34开发板块每日发贴之星
日期:2006-10-09 01:03:11
18#
 楼主| 发表于 2006-3-9 11:14 | 只看该作者
我现在把整个Excel导入程序公布如下,已经通过测试,有不当的地方请指正:(用的是vb.net2005)

    '导入Excel数据
    Private Sub mImport_Excel_Data(ByVal p_FileName As String, _
                            ByVal p_First_Row As Integer, _
                            ByVal p_First_Col As Integer, _
                            ByVal p_Total_Cols As Integer, _
                            ByVal p_DataGrid As DataGridView)
        'p_FileName     导入数据的文件名
        'p_First_Row    导入的起始行
        'p_First_Col    导入的起始列
        'p_Total_Cols   欲导入的总列数

        Dim xlApp As Excel.Application
        Dim xlBook As Excel.Workbook
        Dim xlSheet As Excel.Worksheet

        Dim I As Integer
        Dim J As Integer
        Dim intRows As Integer = 0

        Dim strRange As String = ""

        xlApp = New Excel.Application
        xlBook = xlApp.Workbooks.Add
        xlBook = xlApp.Workbooks.Open(p_FileName)
        'xlSheet = xlBook.Worksheets("Sheet1"
        xlSheet = xlBook.ActiveSheet

        I = 0
        intRows = 0

        '得到总的有效行数
    '第1列为序号(凡是有序号的都视为有效列)
        While Not (CInt(Val(Trim(xlSheet.Range(xlSheet.Cells(p_First_Row + 1 + intRows, 1), xlSheet.Cells(p_First_Row + 1 + intRows, 1)).Text))) = 0)
            intRows = intRows + 1
        End While

        If intRows = 0 Then Return

        dgView1.Rows.Clear()

        With tspProgress
            .Minimum = 0
            .Maximum = p_First_Row + intRows + 2
        End With

        With xlSheet
            For I = p_First_Row To p_First_Row + intRows
                tspProgress.Value = I

                p_DataGrid.Rows.Add()
                p_DataGrid.Rows(I - p_First_Row).Cells(0).Value = I - p_First_Row + 1

                For J = p_First_Col To p_Total_Cols
                    'strRange = Chr(64 + J) & I
                    'p_DataGrid.Rows(I - p_First_Row).Cells(J - 1).Value = xlSheet.Range(strRange, strRange).Text
                    p_DataGrid.Rows(I - p_First_Row).Cells(J - 1).Value = xlSheet.Range(.Cells(I, J), .Cells(I, J)).Text
                Next J
            Next I

        End With

        tspProgress.Value = 0

        xlSheet = Nothing
        xlBook.Close()
        xlApp.Quit()
        xlBook = Nothing
        xlApp = Nothing
    End Sub

使用道具 举报

回复
论坛徽章:
12
授权会员
日期:2006-04-10 23:53:59会员2006贡献徽章
日期:2006-04-17 13:46:34开发板块每日发贴之星
日期:2006-10-09 01:03:11
19#
 楼主| 发表于 2006-3-9 11:16 | 只看该作者
以上看到,可以采用2种方式得到Excel单元格的数据:
1〉
strRange = Chr(64 + J) & I
p_DataGrid.Rows(I - p_First_Row).Cells(J - 1).Value = xlSheet.Range(strRange, strRange).Text

2〉
p_DataGrid.Rows(I - p_First_Row).Cells(J - 1).Value = xlSheet.Range(.Cells(I, J), .Cells(I, J)).Text

使用道具 举报

回复
招聘 : 产品经理/专员
论坛徽章:
67
管理团队2006纪念徽章
日期:2006-04-16 22:44:452012新春纪念徽章
日期:2012-01-04 11:50:442012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25版主1段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24夏利
日期:2013-10-10 13:12:33
20#
发表于 2006-3-9 21:35 | 只看该作者
真不错,需要的就是这种研究

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表