用EXCEL做企業生產報表的理由
Excel表格生成和公式設置十分強大便利
Visual Studio
軟件構思
先在EXCEL裡定制好名為《統計表》的樣表(模版)
在窗體上放很三個控件
軟件欲實現的功能是
這裡要注意的是
SortedList類
除了具備VB
SortedList類表示鍵/值對的集合
SortedList 是 Hashtable 和 Array 的混合
SortedList 在內部維護兩個數組以將數組存儲到列表中
SortedList 的容量是列表可擁有的元素數
SortedList 的元素將按照特定的 IComparer 實現(在創建 SortedList 時指定)或按照鍵本身提供的 IComparable 實現並依據鍵來進行排序
VB
以下是實現代碼
Private Sub Form
DateTimePicker
DateTimePicker
DateTimePicker
DateTimePicker
End Sub
Private Sub 灶具分析統計()
Call killEXCEL()
Dim excelApp As New Excel
Dim 佳尼
Dim 行號 As Integer =
Dim 列號 As Integer =
Dim 辦事處計劃數統計 As New SortedList
Dim 辦事處完成數統計 As New SortedList
Dim 型號計劃數統計 As New SortedList
Dim 型號完成數統計 As New SortedList
Dim 統計表 As Excel
Try
佳尼
統計表 = CType(佳尼
統計表
統計表
統計表
統計表
Dim 生產計劃表 As Excel
For Each 生產計劃表 In 佳尼
If Strings
行號 =
列號 =
Dim 臨時行號 As Integer =
While 生產計劃表
臨時行號 +=
End While
臨時行號
For 行號 =
If (CDate(DateTimePicker
Dim 城市 As String = 生產計劃表
Dim 計劃數 As Decimal = CType(生產計劃表
Dim 完成數 As Decimal = CType(生產計劃表
Dim 未完成數 As Decimal =
If 完成數 < 計劃數 Then '如果沒有完成
未完成數 = 計劃數 - 完成數
End If
If 城市 <> "" Then
If InStr(城市, "沈陽") <> 0 Or InStr(城市, "鞍山") <> 0 Or InStr(城市, "哈爾濱") <> 0 Or InStr(城市, "葫蘆島") <> 0 Then
If 辦事處計劃數統計.Contains("沈陽") Then
辦事處計劃數統計.Item("沈陽") += 計劃數
Else
辦事處計劃數統計.Add("沈陽", 計劃數)
End If
If 辦事處完成數統計.Contains("沈陽") Then
辦事處完成數統計.Item("沈陽") += 未完成數
Else
辦事處完成數統計.Add("沈陽", 未完成數)
End If
Else
If 辦事處計劃數統計.Contains(城市) Then
辦事處計劃數統計.Item(城市) += 計劃數
Else
辦事處計劃數統計.Add(城市, 計劃數)
End If
If 辦事處完成數統計.Contains(城市) Then
辦事處完成數統計.Item(城市) += 未完成數
Else
辦事處完成數統計.Add(城市, 未完成數)
End If
End If
Else
MsgBox(生產計劃表.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 If
If 型號完成數統計.Contains(型號) Then
型號完成數統計.Item(型號) += 未完成數
Else
型號完成數統計.Add(型號, 未完成數)
End If
End If
Next
End If
Next
Dim 城市數 As Integer = 辦事處計劃數統計.Count
Dim 城市數clone As Integer = 辦事處計劃數統計.Count
行號 = 4
'依計劃數大小排序
Dim 辦事處計劃數統計副本 As New SortedList
Dim asa As Decimal = 0.001 '加上此數是為了防止鍵值的重復,在工作表中可選不顯示小數
Dim 辦事處計劃數Enum As IDictionaryEnumerator = 辦事處計劃數統計.GetEnumerator
While 辦事處計劃數Enum.MoveNext
辦事處計劃數統計副本.Add(辦事處計劃數Enum.Value + asa, 辦事處計劃數Enum.Key)
asa += 0.001
End While
'這裡利用SortedList自動排序的功能
Dim i As Integer = 1
For 列號 = 3 To 3 + 城市數 - 1 '從第三列開始填寫數據,這是預先定義的格式
統計表.Cells(行號, 列號).value = 辦事處計劃數統計副本.GetByIndex(城市數clone - i) '城市
統計表.Cells(行號 + 1, 列號).value = 辦事處計劃數統計副本.GetKey(城市數clone - i) '計劃數
統計表.Cells(行號 + 2, 列號).value = 辦事處完成數統計.Item(辦事處計劃數統計副本 .GetByIndex(城市數clone - i)) '計劃數
i += 1
Next
'以型號計劃數多少排序
Dim 型號計劃數統計副本 As New SortedList
辦事處計劃數Enum = 型號計劃數統計.GetEnumerator
While 辦事處計劃數Enum.MoveNext
型號計劃數統計副本.Add(辦事處計劃數Enum.Value + asa, 辦事處計劃數Enum.Key)
asa += 0.001
' MsgBox(辦事處計劃數Enum.Valu
From:http://tw.wingwit.com/Article/program/net/201311/11282.html