
正文
vb.net索引器 vb菜单编辑器索引是什么
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
用VB.NET结合Excel设计统计生产报表
用EXCEL做企业生产报表的理由 Excel表格生成和公式设置十分强大便利 是一个强有力的信息分析与处理工具 特别是EXCEL的公式 函数 VBA语言 功能极其强大 我试用过其他电子表格软件 在功能上和EXCEL根本没有可比性 Visual Studio NET也同样是MicroSoft的产品 Visual Studio NET调用EXCEL做企业报表十分方便 证明当时我选Visual Studio NET作为首选开发工具是正确的 软件构思 先在EXCEL里定制好名为《统计表》的样表(模版) 在样表中设置好各种格式 填写好固定项 在窗体上放很三个控件 两个DateTimePicker控件 用来选择开始统计时间和结束统计时间 一个Button以启动程序 软件欲实现的功能是 点击Button 自动查找符合日期符合日期范围的生产计划工作表 然后利用SortedList统计各个办事处的计划数量和未完成数量 及各个产品型号的计划数量和未完成数量 再把SortedList的数据读出写到《统计表》中 这里要注意的是 各个生产报表格式必须规范统一 因为程序是按照固定单元格位置读取数据的 SortedList类 除了具备VB NET调用EXCEL的基础知识外 本例主要用到SortedList类 SortedList类表示键/值对的集合 这些键和值按键排序并可按照键和索引访问 SortedList 是 Hashtable 和 Array 的混合 当使用 Item 索引器属性按照元素的键访问元素时 其行为类似于 Hashtable 当使用 GetByIndex 或 SetByIndex 按照元素的索引访问元素时 其行为类似于 Array SortedList 在内部维护两个数组以将数组存储到列表中 即 一个数组用于键 另一个数组用于相关联的值 每个元素都是一个可作为 DictionaryEntry 对象进行访问的键/值对 键不能为空引用(Visual Basic 中为 Nothing) 但值可以 SortedList 的容量是列表可拥有的元素数 随着向 SortedList 中添加元素 容量通过重新分配按需自动增加 可通过调用 TrimToSize 或通过显式设置 Capacity 属性减少容量 SortedList 的元素将按照特定的 IComparer 实现(在创建 SortedList 时指定)或按照键本身提供的 IComparable 实现并依据键来进行排序 不论在哪种情况下 SortedList 都不允许重复键 VB NET结合EXCEL统计生产报表 以下是实现代码 供参考 为方便初学者 部份地方加以注释 Private Sub Form _Load(ByVal sender As Object ByVal e As System EventArgs) Handles MyBase LoadDateTimePicker MaxDate = Date NowDateTimePicker MinDate = # / / #DateTimePicker MaxDate = Date NowDateTimePicker MinDate = # / / #End SubPrivate Sub 灶具分析统计()Call killEXCEL()Dim excelApp As New Excel ApplicationDim 佳尼 灶具生产计划 As Excel WorkbookDim 行号 As Integer = Dim 列号 As Integer = Dim 办事处计划数统计 As New SortedListDim 办事处完成数统计 As New SortedListDim 型号计划数统计 As New SortedListDim 型号完成数统计 As New SortedListDim 统计表 As Excel Worksheet Try佳尼 灶具生产计划 = excelApp Workbooks Open( E:\my documents\生产计划\佳尼 灶具生产计划 xls )统计表 = CType(佳尼 灶具生产计划 Worksheets( 统计表 ) Excel Worksheet)统计表 Cells( ) value = DateTimePicker Value ToShortDateString 统计开始日期统计表 Cells( ) value = DateTimePicker Value ToShortDateString 统计结束日期统计表 Range( c :z ) Value = 先清空统计表中原来有关数据统计表 Range( c :z ) Value = Dim 生产计划表 As Excel WorksheetFor Each 生产计划表 In 佳尼 灶具生产计划 Worksheets 遍历生产计划表If Strings Left(生产计划表 Name ) = Or Strings Left(生产计划表 Name ) = Then 如果是 或 开头的表名 因生产计划表名是 或 开头 MsgBox(生产计划表 Name)行号 = 生产计划表中生产数据从第四行开始列号 = 第 列是计划下发日期 从计划下发日期判断是否是所要数据Dim 临时行号 As Integer = 求得工作表中最后一行所在的行号 从第四行开始往下计算While 生产计划表 Cells(临时行号 列号) value Nothing MsgBox(生产计划表 Cells(行号 列号) value 行号)临时行号 += End While临时行号 = 得到生产计划表中 最后数据行所在的行号 MsgBox(临时行号)For 行号 = To 临时行号 生产计划标准格式行号从 开始 到工作表中最后一行If (CDate(DateTimePicker Value ToShortDateString) = CDate(生产计划表.Cells(行号, 列号).value)) And (CDate(DateTimePicker2.Value.ToShortDateString) = CDate(生产计划表 Cells(行号 列号) value)) Then 如果日期在规定范围内 灶具各城市分布情况Dim 城市 As String = 生产计划表 Cells(行号 ) value 第 列是城市名称Dim 计划数 As Decimal = CType(生产计划表 Cells(行号 ) value Decimal) 第 列是计划数Dim 完成数 As Decimal = CType(生产计划表 Cells(行号 ) value Decimal) 第 列是实际完成数Dim 未完成数 As Decimal = 用Decimal是因为后面要加小数If 完成数 计划数 Then '如果没有完成未完成数 = 计划数 - 完成数End IfIf 城市 "" ThenIf InStr(城市, "沈阳") 0 Or InStr(城市, "鞍山") 0 Or InStr(城市, "哈尔滨") 0 Or InStr(城市, "葫芦岛") 0 ThenIf 办事处计划数统计.Contains("沈阳") Then办事处计划数统计.Item("沈阳") += 计划数Else办事处计划数统计.Add("沈阳", 计划数)End IfIf 办事处完成数统计.Contains("沈阳") Then办事处完成数统计.Item("沈阳") += 未完成数Else办事处完成数统计.Add("沈阳", 未完成数)End IfElseIf 办事处计划数统计.Contains(城市) Then办事处计划数统计.Item(城市) += 计划数Else办事处计划数统计.Add(城市, 计划数)End IfIf 办事处完成数统计.Contains(城市) Then办事处完成数统计.Item(城市) += 未完成数Else办事处完成数统计.Add(城市, 未完成数)End IfEnd IfElseMsgBox(生产计划表.Name "没有城市名称", MsgBoxStyle.Critical, "生产计划中要有城市名称")excelApp.Visible = True生产计划表.Activate()生产计划表.Select()End If'以下计算灶具型号分布情况Dim 型号 As String = Strings.Left(生产计划表.Cells(行号, 2).value, 3) '灶具型号在第3列If 型号计划数统计.Contains(型号) Then型号计划数统计.Item(型号) += 计划数Else型号计划数统计.Add(型号, 计划数)End IfIf 型号完成数统计.Contains(型号) Then型号完成数统计.Item(型号) += 未完成数Else型号完成数统计.Add(型号, 未完成数)End IfEnd IfNextEnd IfNextDim 城市数 As Integer = 办事处计划数统计.CountDim 城市数clone As Integer = 办事处计划数统计.Count行号 = 4'依计划数大小排序Dim 办事处计划数统计副本 As New SortedListDim asa As Decimal = 0.001 '加上此数是为了防止键值的重复,在工作表中可选不显示小数Dim 办事处计划数Enum As IDictionaryEnumerator = 办事处计划数统计.GetEnumeratorWhile 办事处计划数Enum.MoveNext办事处计划数统计副本.Add(办事处计划数Enum.Value + asa, 办事处计划数Enum.Key)asa += 0.001End While'这里利用SortedList自动排序的功能Dim i As Integer = 1For 列号 = 3 To 3 + 城市数 - 1 '从第三列开始填写数据,这是预先定义的格式统计表.Cells(行号, 列号).value = 办事处计划数统计副本.GetByIndex(城市数clone - i) '城市统计表.Cells(行号 + 1, 列号).value = 办事处计划数统计副本.GetKey(城市数clone - i) '计划数统计表.Cells(行号 + 2, 列号).value = 办事处完成数统计.Item(办事处计划数统计副本 .GetByIndex(城市数clone - i)) '计划数i += 1Next'以型号计划数多少排序Dim 型号计划数统计副本 As New SortedList办事处计划数Enum = 型号计划数统计.GetEnumeratorWhile 办事处计划数Enum.MoveNext型号计划数统计副本.Add(办事处计划数Enum.Value + asa, 办事处计划数Enum.Key)asa += 0.001' MsgBox(办事处计划数Enum.Valu lishixinzhi/Article/program/net/201311/11282
相关问答
Q1: C# this索引与Item属性冲突
这个问题是为了兼容VB.net和C#。在MSDN有这样一段话vb.net索引器: C# 语言使用 this 关键字来定义索引器而不是通过实现 Item 属性。 Visual Basic 将 Item 实现为默认属性vb.net索引器,该属性提供相同的索引功能 (参考, ,点击) 在VB.net中,通过Item代替C#中的索引器。比如我用反编译工具查看List(Of T) 代码: Public Property Item As T Get If (index = Me._size) Then ThrowHelper.ThrowArgumentOutOfRangeException() End If Return Me._items(index) End Get Set(ByVal value As T) If (index = Me._size) Then ThrowHelper.ThrowArgumentOutOfRangeException() End If Me._items(index) = value Me._version = Me._version + 1 End Set End Property 【结论:Item已经是VB.net的关键字,等同于C#中索引器功效】
Q2: 接口的VB.NET( 一款行业软件)接口
在VB.NET的类里,实现一个接口的语句是:
implements接口名称
例如,下面定义一个车(总称)的接口,这里的车是各种车的总称:
Public Interface ICar
Property color() As String
Property speed() As Long
Sub PrintInfo()
End Interface
然后在不同类型的“车”类里实现它:
Public Class A_Car
Implements ICar
Dim m_color As String, m_speed As Long
Public Property color() As String Implements ICar.color
Get
Return m_color
End Get
Set(ByVal Value As String)
m_color = Value
End Set
End Property
Protected Overrides Sub Finalize()
MsgBox(I was deconstructed!)
End Sub
Public Sub New()
m_color = Red
m_speed = 210
MsgBox(I was constructed!)
End Sub
Public Property speed() As Long Implements ICar.speed
Get
Return m_speed
End Get
Set(ByVal Value As Long)
m_speed = speed
End Set
End Property
Public Sub PrintInfo() Implements ICar.PrintInfo
MsgBox(Color: m_color vbNewLine Speed: m_speed, MsgBoxStyle.Information)
End Sub
End Class
在 Form 的 Load 事件中编写:
Dim myCar As New A_Car
myCar.PrintInfo()
运行之后就创建了一个 A_Car 类的实例 myCar,然后出现两个对话框,分别说明实例已经创建和汽车的信息。当窗体卸载时,这个类的实例 myCar 将自动销毁,这时将出现一个“I was deconstructed!”的对话框。
声明一个接口时,需要考虑以下几点:
1.接口主体只限于对方法,索引器以及属性的声明;
2.接口成员是隐式公开的,如果对其显式指定访问级别,就会出现编译器错误;
3.接口中不能包含字段,构造函数和常量等;
4.在接口中不能实现任何方法,属性或者索引器;
5.在指定方法时,只需要给出返回类型,名称和参数列表,然后分号结束。
面向对象的接口
在C++中,一个类被允许继承多个类。但是在Java以后的语言不被允许。
这样,如果想继承多个类时便非常困难。所以开发方想出了新办法:接口。
一个接口内,允许包含变量、常量等一个类所包含的基本内容。但是,接口中的函数不允许设定代码,也就意味着不能把程序入口放到接口里。由上可以理解到,接口是专门被继承的。接口存在的意义也是被继承。和C++里的抽象类里的纯虚函数是相同的。不能被实例化。
定义接口的关键字是interface,例如:
publicinterfaceMyInterface{
public void add(int x,int y);
public void volume(int x,int y,int z);
}
继承接口的关键字是implements,相当于继承类的extends。
需要注意的是,当继承一个接口时,接口里的所有函数必须全部被覆盖。例如:
class Demo implements MyInterface{
public void add(int x,int y){
System.out.println( +(x+y));
}
public void volume(int x,int y,int z){
System.out.println( +(x*y*z));
}
public static void main(String args[]){
Demo d=new Demo();
d.add(10,20);
d.volume(10,10,10);
}
}
输出结果:
30
1000
当想继承多个类时,开发程序不允许,报错。这样就要用到接口。因为接口允许多重继承(,),而类不允许。所以就要用到接口。
Q3: vb中的程序难题,拜求高手帮忙解决!
1.如何实现VB与EXCEL的无缝连接
VB 是常用的应用软件开发工具之一,由于VB的报表功能有限,而且一旦报表格式发生变化,就得相应修改程序,给应用软件的维护工作带来极大的不便。因为有很多程序员现在已经充分利用Excel的强大报表功能来实现。但由于VB与Excel分别属于不同的应用系统,如何把它们有机地结合在一起,是一个值得我们研究的课题。
笔者在软件开发工作中,对VB的自动化功能和Excel的宏功能进行了一定的研究,实现了VB与Excel的有机结合。现提出来与大家探讨。
一、VB读写Excel表
VB本身的自动化功能可以读写Excel表,其方法如下:
1、在工程中引用Microsoft Excel类型库:
从“工程”菜单中选择“引用”栏;选择Microsoft Excel 9.0 Object Library (Excel2000),然后选择“确定”。表示在工程中要引用Excel类型库。
2、在通用对象的声明过程中定义Excel对象:
Dim xlApp As Excel.Application
Dim XlBook As Excel.WorkBook
Dim xlSheet As Excel.Worksheet
3、在程序中操作Excel表常用命令:
Set xlApp = CreateObject (“Excel.Application”)’创建Excel对象
Set XlBook = xlApp.Workbooks.Open(“文件名”) ’打开已经存在的Excel工作薄文件
xlApp.Visible = True ’设置Excel对象可见(或不可见)
Set xlSheet = xlBook.Worksheets(“表名”)
xlSheet.Cells(row,col) = 值 ’给单元格(row,col)赋值
xlSheet.PrintOut ’打印工作表
xlBook.CloseTrue ’关闭工作薄
xlApp.Quit ’结束Excel对象
Set xlApp = Nothing ’释放xlApp对象
xlBook.RunAutoMacros xlAutoOpen ’运行Excel启动宏
xlBook.RunAutoMacros xlAutoClose ’运行Excel关闭宏
4、在运用以上VB命令操作Excel表时,除非设置Excel对象不可见,否则VB程序可继续执行其它操作,也能够关闭Excel,同时也可对Excel进行操作。但在Excel操作过程中关闭Excel对象时,VB无法知道,如果此时使用Excel对象,则VB程序会出现自动化错误,形成VB程序无法完全控制Excel状况,使得VB与Excel脱节。
二、Excel的宏功能
Excel 提供了一个Visual Basic编辑器,打开Visual Basic编辑器,其中有一工程属性窗口,点击右键菜单的“插入模块”,则增加一个“模块1”,在此模块中可以运用Visual Basic语言编写函数和过程并称之为宏。其中,Excel有两个自动宏:一个是启动宏(Sub Auto_Open()),另一个是关闭宏(Sub Auto_Close())。它们的特性是:当用Excel打开含有启动宏的工作薄时,就会自动运行启动宏,同理,当关闭含有关闭宏的工作薄时就会自动运行关闭宏。但是通过VB的自动化功能来调用Excel工作表时,启动宏和关闭宏不会自动运行,而需要在VB中通过命令 xlBook.RunAutoMacros(xlAutoOpen)和xlBook.RunAutoMacros(xlAutoClose)来运行启动宏和关闭宏。
三、VB与Excel的相互沟通:
充分利用Excel的启动宏和关闭宏,可以实现VB与Excel的相互沟通,其方法如下:
在Excel的启动宏中加入一段程序,其功能是在磁盘中写入一个标志文件,同时在关闭宏中加入一段删除此标志的程序。VB程序在执行时通过判断此标志文件存在与否来判断Excel是否打开,如果此标志文件存在,表明Excel对象正在运行,应该禁止其它程序的运行。如果此标志文件不存在,表明Excel对象已被关闭,此时如果要使用Excel对象运行,必须重新创建Excel对象。
四、举例
1、在VB中,建立一个FORM,在其上放置两个命令按钮,将Command1的Caption属性改为Excel,Command2的Caption属性改为End。然后在其中输入如下程序:
Dim xlApp As Excel.Application '定义Excel类
Dim xlBook As Excel.Workbook '定义工作薄类
Dim XlSheet As Excel.Worksheet '定义工作表类
Private Sub Command1_Click() '打开Excel过程
If Dir(“D:\temp\excel.bz”)= “”Then '判断Excel是否打开
Set xlApp = CreateObject(“Excel.Application”) '创建Excel应用类
xlApp.Visible = True '设置Excel可见
Set xlBook = xlApp.Workbooks.Open(“D:\temp\bb.xls”) '打开Excel工作薄
Set xlSheet = xlBook.Worksheet(1) '打开Excel工作表
xlSheet.Activate '激活工作表
xlSheet.Cells(1,1) = “abc” '给单元格1行驶列赋值
xlBook.RunAutoMacros(xlAutoOpen) '运行Excel中的启动宏
Else
MsgBox(“Excel已打开”)
End If
End Sub
Private Sub Command2_Click()
If Dir(“D:\temp\excel.bz”) “” Then '由VB关闭Excel
xlBook.RunAutoMacros(xlAutoClose) '执行Excel关闭宏
xlBook.Close(True)关闭Excel工作薄
xlApp.Quit '关闭Excel
End If
Set xlApp = Nothing '释放Excel对象
End
End Sub
2、在D盘根目录上建立一个名为temp的子目录,在temp目录下建立一个名为“bb.xls”的Excel文件。
3、在“bb.xls”中打开Visual Basic编辑器,在工程窗口中点鼠标键选择插入模块,在模块中输入以下程序存盘:
Sub auto_open()
Open “d:\temp\excel.bz” For Output As #1
Close #1
End Sub
Sub auto_close()
Kill “d:\temp\excel.bz”
End Sub
4、运行VB程序,点击Excel按钮可以打开Excel系统,打开Excel系统后,VB程序和Excel分别属两个不同的应用系统,均可同时进行操作,由于系统加了判断,因此在VB程序中重复点击Excel按钮时会提示Excel已打开。如果在Excel中关闭Excel后再点Excel按钮,则会重新打开Excel。而无论Excel打开与否,通过VB程序均可关闭Excel。这样就实现了VB与Excel的无缝连接。
2.用VB.NET结合Excel设计统计生产报表
用EXCEL做企业生产报表的理由
Excel表格生成和公式设置十分强大便利,是一个强有力的信息分析与处理工具。特别是EXCEL的公式、函数、VBA语言,功能极其强大。我试用过其他电子表格软件,在功能上和EXCEL根本没有可比性。
Visual Studio ,NET也同样是MicroSoft的产品,Visual Studio ,NET调用EXCEL做企业报表十分方便。证明当时我选Visual Studio ,NET作为首选开发工具是正确的。
软件构思
先在EXCEL里定制好名为《统计表》的样表(模版),,在样表中设置好各种格式,填写好固定项。
在窗体上放很三个控件,两个DateTimePicker控件,用来选择开始统计时间和结束统计时间。一个Button以启动程序。
软件欲实现的功能是:点击Button1,自动查找符合日期符合日期范围的生产计划工作表,然后利用SortedList统计各个办事处的计划数量和未完成数量,及各个产品型号的计划数量和未完成数量。再把SortedList的数据读出写到《统计表》中。
这里要注意的是,各个生产报表格式必须规范统一,因为程序是按照固定单元格位置读取数据的。
SortedList类
除了具备VB,NET调用EXCEL的基础知识外,本例主要用到SortedList类。
SortedList类表示键/值对的集合,这些键和值按键排序并可按照键和索引访问。
SortedList 是 Hashtable 和 Array 的混合。当使用 Item 索引器属性按照元素的键访问元素时,其行为类似于 Hashtable。当使用 GetByIndex 或 SetByIndex 按照元素的索引访问元素时,其行为类似于 Array。
SortedList 在内部维护两个数组以将数组存储到列表中;即,一个数组用于键,另一个数组用于相关联的值。每个元素都是一个可作为 DictionaryEntry 对象进行访问的键/值对。键不能为空引用(Visual Basic 中为 Nothing),但值可以。
SortedList 的容量是列表可拥有的元素数。随着向 SortedList 中添加元素,容量通过重新分配按需自动增加。可通过调用 TrimToSize 或通过显式设置 Capacity 属性减少容量。
SortedList 的元素将按照特定的 IComparer 实现(在创建 SortedList 时指定)或按照键本身提供的 IComparable 实现并依据键来进行排序。不论在哪种情况下,SortedList 都不允许重复键。
VB,NET结合EXCEL统计生产报表
以下是实现代码,供参考。为方便初学者,部份地方加以注释。
现在让我们来试用一下,先选择开始统计时间和结束统计时间,点击Button1,程序就自动统计出各个办事处的及各个产品的有关计划数量及未完成数量,是不是很方便。
关于vb.net索引器和vb菜单编辑器索引是什么的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







