EXCEL获取单元格内容方法



在VS2012中调用COM Interop DLL操作Excel通过get_Range去获取Range时,会发生Object does not contain a definition for get_Range的错误。其原因和解决方案:

Misha‘s explanation is correct - when using No PIA, methods returning object are treated as if they return dynamic in order to simulate the VBA semantics of COM Variants. Because the return value of sh.Cells is Object, sh.get_Range is dispatched dynamically, and the dynamic COM binder does not support the get_Range syntax exposed in C# before indexed properties were supported. We‘ve tried to maintain backwards compatibility wherever possible when you turn on Embed Interop Types for a COM reference, but this is one place where some further tweaking is required.


The workaround you proposed will work - a cleaner workaround is the one Mike Rosenblum pointed out to use C# 4.0‘s new indexed properties syntax, which the dynamic COM binder does understand. You can then represent the operation with the following code:

Excel.Range r = sh.Range[sh.Cells[1, 1], sh.Cells[2, 2]];

See Also
get_Range method missing with embedded interop assembly


具体来讲[2]

由于Framework版本不同,因此支持的也不一样

例如:
在 .NET Framework 3.5 語法

Excel.Range r = sh.Range(sh.Cells[1, 1], sh.Cells[2, 2]);
在 .NET Framework 4.0-4.5 改用
Excel.Range r = sh.Range[sh.Cells[1, 1], sh.Cells[2, 2]];



winform导出Excel代码:

使用方法:    ExportExcel("条形码数据一览", GetSearchData);//GetSearchData可以传datatable 或者datagridview下面代码是传递Datatable的。

     /// <summary>  
              /// 查询的数据导出为Excel  
              /// </summary>  
              /// <param name="fileName">导出文件名</param>  
              /// <param name="myDGV">导出的datatable数据</param>  
              private void ExportExcel(string fileName, MDataTable myDGV)  
              {  
                   string saveFileName = "";  
                   SaveFileDialog saveDialog = new SaveFileDialog();  
                   saveDialog.DefaultExt = "xls";  
                   saveDialog.Filter = "Excel文件|*.xls";  
                   saveDialog.FileName = fileName;  
                   saveDialog.ShowDialog();  
                   saveFileName = saveDialog.FileName;  
                   if (saveFileName.IndexOf(":") < 0) return; //被点了取消  
                   Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();  
                   if (xlApp == null)  
                   {  
                        MessageBox.Show("无法创建Excel对象,可能您的机子未安装Excel");  
                        return;  
                   }  
      
                   Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;  
                   Microsoft.Office.Interop.Excel.Workbook workbook =  
     workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);  
                   Microsoft.Office.Interop.Excel.Worksheet worksheet =  
     (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1  
      
      
                   //写入标题  
                   for (int i = 0; i < myDGV.Columns.Count; i++)  
                   {  
                        worksheet.Cells[1, i + 1] = myDGV.Columns[i].ColumnName;  
                        //标题  
                        Microsoft.Office.Interop.Excel.Range titleRange = worksheet.Range[worksheet.Cells[1, 1],   
    worksheet.Cells[1, i + 1]];//选中标题  
                        titleRange.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter; //水平居中  
                   }  
                   //写入数值  
                   for (int r = 0; r < myDGV.Rows.Count; r++)  
                   {  
                        for (int i = 0; i < myDGV.Columns.Count; i++)  
                        {  
                             worksheet.Cells[r + 2, i + 1] = myDGV.Rows[r][i].Value;  
                             //设置边框  
                             Microsoft.Office.Interop.Excel.Range allRange = worksheet.Range[worksheet.Cells[1, 1],   
    worksheet.Cells[r + 1, i + 1]];  
                             allRange.Borders.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;  
                        }  
                        System.Windows.Forms.Application.DoEvents();  
                   }  
                   //设置最后一行边框  
                   Microsoft.Office.Interop.Excel.Range endRange = worksheet.Range[worksheet.Cells[1, 1],   
    worksheet.Cells[myDGV.Rows.Count + 1,myDGV.Columns.Count]];  
                   endRange.Borders.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;  
                   worksheet.Columns.EntireColumn.AutoFit();//列宽自适应  
                   if (saveFileName != "")  
                   {  
                        try  
                        {  
                             workbook.Saved = true;  
                             workbook.SaveCopyAs(saveFileName);  
                        }  
                        catch (Exception ex)  
                        {  
                             MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message);  
                        }  
      
                   }  
                   xlApp.Quit();  
                   GC.Collect();//强行销毁  
                   MessageBox.Show("文件: " + fileName + ".xls 保存成功", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);  
              }  

 

其他DataGridview导出Excel的资料:

http://www.360doc.com/content/11/1211/17/8147167_171489298.shtml  winform应用使用DataGridView数据导出到Excel

http://ruantnt.blog.163.com/blog/static/190525452201110185199346/  winform(c#) DataGridView导出Excel 
http://hi.baidu.com/wenshangang/item/1227f415fab1a35a2a3e229f  Winform中dataGridView控件导出到excel表格中

http://blog.sina.com.cn/s/blog_62cd5a980101905a.html  WinForm中DataGridView导出为Excel(快速版)

http://www.cr173.com/html/7906_1.html  WinForm下DataGridView导出Excel的实现


### 回答1: Python可以使用openpyxl库来获取Excel单元格内容。具体步骤如下: 1. 安装openpyxl库 可以使用pip命令来安装openpyxl库: ``` pip install openpyxl ``` 2. 打开Excel文件 使用openpyxl库中的load_workbook函数来打开Excel文件: ``` from openpyxl import load_workbook workbook = load_workbook(filename='example.xlsx') ``` 3. 获取工作表 使用workbook对象的active属性来获取当前活动的工作表: ``` worksheet = workbook.active ``` 也可以使用工作表名称来获取指定的工作表: ``` worksheet = workbook['Sheet1'] ``` 4. 获取单元格内容 使用工作表对象的cell方法获取单元格对象,然后使用value属性来获取单元格内容: ``` cell = worksheet.cell(row=1, column=1) content = cell.value ``` 其中,row和column参数分别表示行号和列号,从1开始计数。 完整代码示例: ``` from openpyxl import load_workbook workbook = load_workbook(filename='example.xlsx') worksheet = workbook.active cell = worksheet.cell(row=1, column=1) content = cell.value print(content) ``` ### 回答2: 在Python中,可以使用openpyxl库来读取Excel文件。openpyxl是一个用于读取和写入Excel 2010 xlsx文件的库,支持多种操作,比如获取单元格内容。 首先,需要安装openpyxl库: ```python pip install openpyxl ``` 打开Excel文件: ```python from openpyxl import load_workbook workbook = load_workbook(filename="example.xlsx") ``` 获取工作表: ```python sheet = workbook.active # 或者 sheet = workbook["Sheet1"] ``` 获取单元格内容: ```python cell = sheet.cell(row=1, column=1) # 获取第1行第1列的单元格 print(cell.value) # 输出单元格内容 ``` 如果需要获取多个单元格内容,可以使用for循环遍历: ```python for row in sheet.iter_rows(min_row=2, max_row=5, min_col=1, max_col=2): for cell in row: print(cell.value, end='\t') print() ``` 上述代码以二维列表形式输出了第2~5行、第1~2列的单元格内容。 需要注意的是,openpyxl库支持的Excel文件类型为xlsx,不支持xls。此外,如果Excel文件被占用,也无法读取其中的内容。 ### 回答3: Python获取Excel单元格内容方法有很多种,其中最常用的是使用开源包pandas或者openpyxl。 pandas是一个开源的数据分析工具包,它可以方便地读取和处理各种数据格式,包括Excel表格。使用pandas读取表格的代码如下: ```python import pandas as pd # 读取Excel表格 df = pd.read_excel("example.xlsx") # 获取单元格内容 cell_value = df.at[0, "A"] ``` 这里,我们首先使用read_excel函数读取Excel表格,然后可以通过at方法获取指定单元格内容。这里的at方法采用的是行列坐标的方式,第一个参数表示行数,第二个参数表示列名。 如果不想使用pandas,我们还可以选择使用openpyxl,这是一个专门用于处理Excel文件的Python库。要使用openpyxl获取Excel单元格内容,可以按照下面的方式进行: ```python import openpyxl # 读取Excel表格 wb = openpyxl.load_workbook("example.xlsx") sheet = wb.active # 获取单元格内容 cell_value = sheet.cell(row=1, column=1).value ``` 这里,我们首先使用load_workbook函数读取Excel表格,然后获取当前活动的工作表(即第一个工作表)。之后,我们可以使用cell方法获取指定单元格内容。这里的cell方法采用的是行列坐标的方式,第一个参数表示行数,第二个参数表示列数。 无论是使用pandas还是openpyxl,Python获取Excel单元格内容都相对简单,只需要使用相应的API即可。在实际开发中,可以根据具体需求选择适合自己的方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值