VB.NET成绩统计问题 如何使用VB.NET将表格上的多个姓名对应的成绩进行统计呢?比如计算每个姓名对应的成绩1和成绩2的总和。 请问有什么好的实现方法吗?求解! 以下是问题相关的图片链接:
关于#.net#的问题:如何使用VB.NET将表格上的多个姓名对应的成绩进行统计呢
该问题来自社区帖: https://bbs.csdn.net/topics/615711574.为符合问答规范, 该问题经过ChatGPT优化
VB.NET成绩统计问题 如何使用VB.NET将表格上的多个姓名对应的成绩进行统计呢?比如计算每个姓名对应的成绩1和成绩2的总和。 请问有什么好的实现方法吗?求解! 以下是问题相关的图片链接:
VB.NET成绩统计问题 如何使用VB.NET将表格上的多个姓名对应的成绩进行统计呢?比如计算每个姓名对应的成绩1和成绩2的总和。 请问有什么好的实现方法吗?求解! 以下是问题相关的图片链接:
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 佛弟子文獻學者孫守真任真甫 2023-06-04 13:53关注
菩薩慈悲:菩薩您的表格是Excel還是MS Word?還是其他呢?
用VBA的話,就用 Scripting.Dictionary,在VB.NET的話,則應有類似且效能更好的Dictionary來實作,很容易的。若需詳情,俟覆再議。感恩感恩 南無阿彌陀佛以OLEDB、ADODB 實作
昨天才在iT邦幫忙收到 IT 邦邦友大師菩薩的指點,才知道用Dictionary的效能較 ADO、SQL 差太多,
我用 3 萬筆資料測試結果如下:
1.Access : 不超過 1 秒
2.Excel +VBA + SQL (未上色) : 12 秒
3.Excel +VBA + SQL (上色) : 17 秒
4.Excel +VBA (你的) : 2 分 35 秒因此先改用ADODB 與 OLEDB 實作看看。
ps.以下程式碼在測試對象檔案開啟時是可以測試成功的。
Microsoft.Jet.OLEDB.4.0 要用 .xls 而 Microsoft.ACE.OLEDB.12.0 才能用 .xlsm .xlsx .xlsb …… 在不開啟原檔時,才不會出錯。
Sub sumbyNameGroup() ' 設置讀取檔案路徑及連線字串 Dim filePath As String = "C:\Users\ssz3\Documents\t.xlsb" '"your_excel_file_path" Dim sheetName = "工作表1" 'Dim connString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=Excel 12.0;" Dim connString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Excel 8.0;Database=" + filePath Dim conn As New ADODB.Connection conn.Open(connString) ' 構建 SQL 語句,選擇要操作的工作表及數據欄位 Dim sqlStr As String = "SELECT 姓名, SUM(成績1) AS 成績1總和, SUM(成績2) AS 成績2總和 FROM [" + sheetName + "$] GROUP BY 姓名" Dim rst As New ADODB.Recordset rst.Open(sqlStr, conn) ' 輸出結果 Do Until rst.EOF Console.WriteLine(rst.Fields("姓名").Value + " " + rst.Fields("成績1總和").Value.ToString() + " " + rst.Fields("成績2總和").Value.ToString()) 'Console.WriteLine(rst.Fields(0).Value + " " + ' rst.Fields(1).Value.ToString() + " " + ' rst.Fields(2).Value().ToString()) rst.MoveNext() Loop rst.Close() : conn.Close() End Sub
或
Sub sumbyNameGroup() ' 設置讀取檔案路徑及連線字串 Dim filePath As String = "C:\Users\ssz3\Documents\t.xlsb" '"your_excel_file_path" Dim sheetName = "工作表1" 'Dim connString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=Excel 12.0;" Dim connString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Excel 8.0;Database=" + filePath ' 創建 OleDbConnection Dim conn As System.Data.OleDb.OleDbConnection = New System.Data.OleDb.OleDbConnection(connString) ' 構建 SQL 語句,選擇要操作的工作表及數據欄位 Dim sqlStr As String = "SELECT 姓名, SUM(成績1) AS 成績1總和, SUM(成績2) AS 成績2總和 FROM [" + sheetName + "$] GROUP BY 姓名" ' 創建 OleDbDataAdapter Dim da As System.Data.OleDb.OleDbDataAdapter = New System.Data.OleDb.OleDbDataAdapter(sqlStr, conn) ' 創建 DataTable 物件 Dim dt As DataTable = New DataTable() ' 執行 SQL 查詢並將查詢結果填充到 DataTable da.Fill(dt) ' 關閉資源 da.Dispose() conn.Dispose() ' 輸出結果 For Each row As DataRow In dt.Rows Console.WriteLine(row("姓名").ToString() + " " + row("成績1總和").ToString() + " " + row("成績2總和").ToString()) Next End Sub
而若要參考ADODB組建,則須將其「內嵌Interop類型」屬性設成 False,如圖:
產出結果:
解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥30 关于#开发语言#的问题:我需要在抄板的基础上再抄板抄程序,根据RDA8851CM基础上开发
- ¥15 oracle 多个括号,怎么删除指定的括号及里面的内容?
- ¥15 poly函数表达式的看法
- ¥15 我想问一下有人熟悉思科packet tracer
- ¥15 小新14API2019想用bios调风扇
- ¥15 Python和易语言爬虫探讨
- ¥15 有Sakai 会吗,没做过,需要交
- ¥20 使用vba登录公司统一登录的网页
- ¥15 opensea上传人机验证不了
- ¥15 RK3568 kernel5.10