我讨论了Excel 2007和Excel 2010 Beta中存在的错误。以下是该条目的摘要:
当报表工作簿中的Excel范围名称引用数据库工作簿中的表单范围名称时,如果先打开报表工作簿,然后再打开数据库工作簿,则Excel会删除报表工作簿在数据库工作簿中引用的所有表单范围名称。
如果您不使用工作表范围的名称,那么此建议意义不大。因此,让我们先讨论打印范围来讨论范围名称的范围
分配打印区域时,实际上是在为工作表分配范围名称“ Print_Area”。然后,在打印工作表时,如果已定义,则Excel仅打印Print_Area范围。
这种方法在早期的Excel中非常有效,当时工作簿只能有一个工作表。但是后来,Microsoft在1993年用Excel 5引入了多页工作簿。据说,微软正在向一组
开发人员演示Excel 5的早期版本。其中一个问:“我们现在可以在一个工作簿中放几张纸。但是我们只能有一个Print_Area范围名称。那么我们如何为工作簿中的每张图纸分配一个打印区域?”
程序员挤在舞台上,故事走了,最后告诉开发人员:“我们会尽快就此与您联系。”
程序员想出的是一种限定范围名称的方法。即,Excel范围名称可以具有工作簿范围或工作表范围。若要查看它们的工作原理,假设您定义“ Foo”以引用新工作簿的第1页的某些范围。
默认情况下,这将是一个工作簿范围的名称。现在,在工作表2中,假设您将工作表的区域定义为“ Sheet2!Foo”。这样做会将范围定义为工作表范围的名称。
(新Excel中的“新名称”对话框提供了一个下拉列表框,与以前的Excel版本相比,它使您可以更轻松地指定范围。)
现在让我们看看这些名称是如何工作的……
激活图纸2按F5键,在“转到”对话框中输入“ Foo”作为“参考”,然后按OK。Excel将为工作表2选择工作表范围的名称。
激活图纸3再次使用GoTo对话框转到“ Foo”。这次,Excel将选择由工作簿作用域名称定义的范围,该名称参考表1。
激活图纸3使用“转到”对话框转到“ Sheet2!Foo”。这次,Excel将选择由工作表范围名称定义的范围名称,该名称指的是工作表2。
一个工作簿中可以有一个工作簿作用域名称,但是与工作表一样多。
这使我们进入了数据库工作簿……
到目前为止,我建议在数据库工作簿中使用多个工作表。例如,您可以在名为Actual的工作表中拥有一个数据库,而在名为Target的工作表中拥有另一个数据库。
可以为这两个数据库分配工作表范围的名称Data。使用这种方法,您可以使用以下引用来引用两个范围:
= [Databasexls]实际!数据
= [Databasexls]目标!数据
在Excel 2007之前,这种方法非常有效。但是,正如我在博客条目中对Excel漏洞(与Excel 2007(可能还有Excel 2010))中所述的那样,必须在打开报表工作簿之前打开Databasexls(或Databasexlsx)。如果首先打开报表工作簿,则Excel将在数据库工作簿中找到报表工作簿所依赖的所有工作表范围的名称,然后自动删除它们。
那么,解决此错误的最佳方法是什么?
在我的博客文章中,我提供了三种选择:使用Excel 2003,先打开数据库工作簿,或者在数据库工作簿中不要使用工作表范围的名称。最后的建议似乎是最好的长期解决方案。
也就是说,当您设置数据库和报表工作簿时,请按照设置范围名称以将报表连接到Excel数据库,第1部分中的说明来设置数据库工作簿。然后,当您需要其他数据库时-用于目标或在不同的时间时间段,
或者逻辑上不同的数据,或者其他任何内容,请在单独的工作簿中创建这些数据库。
然后,当您打开报表工作簿时,可以使用“编辑链接”对话框打开所有数据库工作簿。为此……
在New Excel中,选择“数据”,“连接”,“编辑链接”
在Classic Excel中,选择“编辑”,“链接”
最后,在“编辑链接”对话框中,选择列表中的所有工作簿,然后选择“开源”。当您这样做时,Excel将打开所有这些数据库工作簿。
这是我目前听到和研究的最好建议。如果我有更好的建议或者读者这边有更好的建立,我会一直与大家讨论并研究和大家一起分享的。
Excel文档成员指的是Excel文档中的成员,包括用户成员和内置成员两类。用户成员包括表格、工作表、报告、图表、公式等;内置成员则包括窗口、活动格、菜单栏、工具栏、功能区等。这些成员构成了Excel文档的结构,它们可以帮助用户或者程序员更好地完成文档的编辑、存储等 *** 作。
首先要引入
using System;using SystemDataOleDb;
using SystemData;
using MicrosoftOfficeInteropExcel;
第二步
读取Excel文件
protected MicrosoftOfficeInteropExcelApplication objExcelApp;//定义Excel Application对象private MicrosoftOfficeInteropExcelWorkbooks objExcelWorkBooks;//定义Workbook工作簿集合对象
protected MicrosoftOfficeInteropExcelWorkbook objExcelWorkbook;//定义Excel workbook工作簿对象
private Worksheet objExcelWorkSheet;//定义Workbook工作表对象
objExcelApp = new MicrosoftOfficeInteropExcelApplicationClass();
objExcelWorkBooks = objExcelAppWorkbooks;
objExcelWorkbook = objExcelWorkBooksOpen(strFileFullName, 0, false, 5, "", "", true,
MicrosoftOfficeInteropExcelXlPlatformxlWindows, "", true, false, 0, true, false, false);
//方法中的各种参数的意思,第一个是文件;其他的参数建议查看一下帮助文档
第三步
打开工作表
objExcelWorkSheet = (Worksheet)objExcelWorkbookWorksheets[strSheetName]; //strSheetName是指的Exce工作簿的Sheet名,如果没有命名则为"1"objExcelWorkSheetSelect(TypeMissing);
第四步
获取单元格值
//你这里只要比较B4和B5的长度,所以只需取这两个值就可以//获得当前活动表
Worksheet objExcelWorkSheetTemp = (Worksheet)objExcelAppActiveSheet;
//B4的值
Range objRange = objExcelWorkSheetTempget_Range(objExcelWorkSheetTempCells[4, 2], objExcelWorkSheetTempCells[4, 2]);
string strB4Value = objRangeValue2ToSting();
//同理读取B5值
Range objRange2 = objExcelWorkSheetTempget_Range(objExcelWorkSheetTempCells[5, 2], objExcelWorkSheetTempCells[5, 2]);
string strB5Value = objRange2Value2ToSting();
//若想循环取值,建议使用oledb方式将数据读出来,放在DataTable中,再循环处理,这里就不细说,网上到处都有
第五步
此时两个值已经取得,比较值长度和处理字符串,相信你也会。这里也就不细说了。
第六步
往Excel里写值
objExcelWorkSheetTempCells[intRow, intCol] = strValue;//intRow,行;intCol;列;strValue,你处理完以后的值第七步
保存Excel
objExcelWorkbookSave();最后
在前台返回MessageBox即可。相信你也会。
有什么问题再问我吧。
以上就是关于设置将报表连接到Excel数据库-excel连接数据库-Excel学习网全部的内容,包括:设置将报表连接到Excel数据库-excel连接数据库-Excel学习网、excel文档成员是什么意思、c# 修改excel中某一行某一列的数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)