ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 1955|ตอบกลับ: 0

[VB.NET] การสร้างชีตและหลักให้กับ Google Sheet เพื่อเก็บข้อมูลชิ้นส่วนอุปกรณ์คอมพิวเตอร์ลงไปในชีต

[คัดลอกลิงก์]

320

กระทู้

512

โพสต์

6583

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
6583








ต้อง Add Reference System.Management เข้าไปด้วย เนื่องจากเราต้องใช้งาน WMI ...

สำหรับโค้ดชุดนี้แอดมินจะนำเสนอการสร้างชีต พร้อมกับหลักขึ้นมาใหม่ เพื่อทำการส่งข้อมูลออกจาก ListView Control ที่แสดงผลรายการชิ้นส่วนอุปกรณ์คอมพิวเตอร์ ด้วยการใช้งาน WMI (Windows Management Instrumental) และนำข้อมูลทั้งหมดไปเก็บไว้ใน Google Sheet ได้ ... พร้อมกับสามารถลบชีตที่ต้องการออกไปได้ ... Youtube อธิบายการทำงานประกอบสำหรับโค้ดชุดนี้ ...

สิ่งที่ควรจะต้องทำ ...
1. รับไฟล์ Credentials จาก Google เพื่อกำหนดสิทธิ์การเข้าถึงชีต ... Youtube แสดงวิธีการขั้นตอนในการรับไฟล์ Credentials ...
2. สร้าง Google Sheets ขึ้นมาใหม่ จะได้ SpreadSheetID และแก้ไขชื่อไฟล์ หรือใน Google Sheets เรียกว่า Application Name
3. แก้ไขค่าตัวแปร ... ให้ตรงกับชีตของแต่ละคน

  1.     Public Service As SheetsService
  2.     Public SpreadsheetId As String = "1nBOWl-PDGwYng6IOifi6bhoLfvamTn-45CWtn5t59qs"
  3.     Public ApplicationName = "SampleSheet" '// Same as Filename.
  4.     '// JSON credential file path.
  5.     Public CredentialFilePath As String = MyPath(Application.StartupPath) & "credentials\GoogleSheet.json"
คัดลอกไปที่คลิปบอร์ด

หากท่านรันโปรแกรมโดยที่ไม่ได้แก้ไขอะไร มันจะไปเก็บข้อมูลไว้ในชีตของแอดมิน แต่ก็สามารถลบชีตออกได้ ... ชีตตัวอย่างของโค้ดชุดนี้

มาดูโค้ดฉบับเต็มกันเถอะ ...
  1. Imports System.Management
  2. Imports Google.Apis.Sheets.v4
  3. Imports Google.Apis.Sheets.v4.Data

  4. Public Class frmComputerPart

  5.     Dim SheetName As String

  6.     ' / ---------------------------------------------------------------------------------------------
  7.     Private Sub frmComputerPart_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  8.         '// Initialize Authenticate with Google Sheets API.
  9.         Call Credentials()
  10.         '// Set the form to stay on top
  11.         'Me.TopMost = True
  12.         Call btnListPart_Click(sender, e)
  13.     End Sub

  14.     Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
  15.         Me.Close()
  16.     End Sub

  17.     Private Sub frmComputerPart_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
  18.         Me.Dispose()
  19.         GC.SuppressFinalize(Me)
  20.         Application.Exit()
  21.     End Sub

  22.     '// ---------------------------------------------------------------------------------------------
  23.     '// Populate any parts in computer to ListView Control.
  24.     '// ---------------------------------------------------------------------------------------------
  25.     Private Sub btnListPart_Click(sender As Object, e As EventArgs) Handles btnListPart.Click
  26.         '// Initialize ListView Control
  27.         With ListView1
  28.             .Clear()
  29.             .View = View.Details
  30.             .GridLines = True
  31.             .FullRowSelect = True
  32.             .HideSelection = False
  33.             .MultiSelect = False
  34.             .Columns.Add("Part name", ListView1.Width \ 2 - 50)
  35.             .Columns.Add("Description", ListView1.Width \ 2 + 20)
  36.         End With
  37.         Dim LV As ListViewItem
  38.         Dim i As Integer
  39.         '// Processor
  40.         Dim Searcher As New ManagementObjectSearcher("root\CIMV2", "SELECT * FROM Win32_Processor")
  41.         For Each QueryObj As ManagementObject In Searcher.Get()
  42.             '// ---------------------------------------------------------------------------------------------
  43.             '// Get System Name for create sheet name in Google Sheet.
  44.             SheetName = QueryObj("SystemName")
  45.             '// ---------------------------------------------------------------------------------------------
  46.             LV = ListView1.Items.Add("System Name")
  47.             LV.SubItems.Add(QueryObj("SystemName"))
  48.             LV = ListView1.Items.Add("CPU Name")
  49.             LV.SubItems.Add(QueryObj("Name"))
  50.             LV = ListView1.Items.Add("Processor ID")
  51.             LV.SubItems.Add(QueryObj("ProcessorID"))
  52.         Next
  53.         '// BaseBoard
  54.         Searcher = New ManagementObjectSearcher("root\CIMV2", "SELECT * FROM Win32_BaseBoard")
  55.         For Each QueryObj As ManagementObject In Searcher.Get()
  56.             LV = ListView1.Items.Add("MainBoard Manufacturer")
  57.             LV.SubItems.Add(QueryObj("Manufacturer"))
  58.             LV = ListView1.Items.Add("MainBoard Serial Number")
  59.             LV.SubItems.Add(QueryObj("SerialNumber"))
  60.             LV = ListView1.Items.Add("MainBoard Product Name")
  61.             LV.SubItems.Add(QueryObj("Product"))
  62.         Next
  63.         '// Hard Disk Drive use PhysicalMedia Class
  64.         Searcher = New ManagementObjectSearcher("root\CIMV2", "SELECT * FROM Win32_PhysicalMedia")
  65.         i = 1
  66.         For Each QueryObj As ManagementObject In Searcher.Get()
  67.             If InStr(QueryObj("Tag"), "CDROM") = 0 Then
  68.                 LV = ListView1.Items.Add("Hard Disk Serial Number (" & i & ")")
  69.                 LV.SubItems.Add(Trim(QueryObj("SerialNumber")))
  70.                 i = i + 1
  71.             End If
  72.         Next

  73.         '// Video Controller.
  74.         Searcher = New ManagementObjectSearcher("root\CIMV2", "SELECT * FROM Win32_VideoController")
  75.         i = 1
  76.         For Each QueryObj As ManagementObject In Searcher.Get()
  77.             LV = ListView1.Items.Add("Video Controller (" & i & ")")
  78.             LV.SubItems.Add(Trim(QueryObj("Name")))
  79.             i = i + 1
  80.         Next

  81.         '// CD/DVD
  82.         Searcher = New ManagementObjectSearcher("root\CIMV2", "SELECT * FROM Win32_CDROMDrive")
  83.         i = 1
  84.         For Each QueryObj As ManagementObject In Searcher.Get()
  85.             LV = ListView1.Items.Add("CD/DVD Manufacturer (" & i & ")")
  86.             LV.SubItems.Add(Trim(QueryObj("Name")))
  87.             LV = ListView1.Items.Add("CD/DVD Serial Number (" & i & ")")
  88.             LV.SubItems.Add(Trim(QueryObj("SerialNumber")))
  89.             i = i + 1
  90.         Next
  91.         '// Memory
  92.         Searcher = New ManagementObjectSearcher("root\CIMV2", "SELECT * FROM Win32_PhysicalMemory")
  93.         i = 1
  94.         For Each QueryObj As ManagementObject In Searcher.Get()
  95.             LV = ListView1.Items.Add("Memory (" & i & ")")
  96.             LV.SubItems.Add(Trim(QueryObj("Manufacturer")) & "/" & Trim(QueryObj("SerialNumber")))
  97.             i = i + 1
  98.         Next
  99.         '// Network adapter
  100.         Searcher = New ManagementObjectSearcher("root\CIMV2", "SELECT * FROM Win32_NetworkAdapter")
  101.         For Each QueryObj As ManagementObject In Searcher.Get()
  102.             If Not String.IsNullOrEmpty(QueryObj("MACAddress")) And Microsoft.VisualBasic.Left(QueryObj("MACAddress"), 2) <> "00" Then
  103.                 LV = ListView1.Items.Add("MAC Address")
  104.                 LV.SubItems.Add(QueryObj("MACAddress"))
  105.                 LV = ListView1.Items.Add("Network Card Manufacturer")
  106.                 LV.SubItems.Add(QueryObj("Manufacturer"))
  107.                 LV = ListView1.Items.Add("Network Product Name")
  108.                 LV.SubItems.Add(QueryObj("ProductName"))
  109.             End If
  110.         Next
  111.     End Sub

  112.     Private Sub frmComputerPart_Resize(sender As Object, e As EventArgs) Handles Me.Resize
  113.         ' Resize ListView Control.
  114.         If ListView1.Columns.Count > 0 Then
  115.             With ListView1
  116.                 .Columns(0).Width = ListView1.Width \ 2 - 50
  117.                 .Columns(1).Width = ListView1.Width \ 2 + 20
  118.             End With
  119.         End If
  120.     End Sub

  121.     '// ---------------------------------------------------------------------------------------------
  122.     '// Create new sheet and columns then load data to the Google Sheets.
  123.     '// ---------------------------------------------------------------------------------------------
  124.     Private Sub btnExport2Sheet_Click(sender As Object, e As EventArgs) Handles btnExport2Sheet.Click
  125.         '// If exist sheet name then remove it.
  126.         '// อันที่จริงเราไม่ต้องส่งชื่อ SheetName ไป เพราะว่าค่าตัวแปรนี้เป็นแบบมองเห็นได้ทั้งฟอร์ม
  127.         '// แต่ผมเขียนเป็นโปรแกรมย่อย เผื่อที่เราจะนำเอาไปใช้ในงานอื่นได้ โดยที่จะต้องระบุชื่อชีตไปด้วยครับ
  128.         '// Function SheetExists(ByVal SheetName As String) As Boolean
  129.         If SheetExists(SheetName) Then Call RemoveSheetByName(SheetName)
  130.         '// Create the new sheet.
  131.         Call CreateSheet()
  132.         '// Add columns to the new sheet.
  133.         Call AddDataColumns()
  134.         '//
  135.         MessageBox.Show("New sheet with new columns created successfully.", "Report Status", MessageBoxButtons.OK, MessageBoxIcon.Information)
  136.     End Sub

  137.     '// ---------------------------------------------------------------------------------------------
  138.     '// Method to create a new sheet.
  139.     '// ---------------------------------------------------------------------------------------------
  140.     Private Sub CreateSheet()
  141.         Dim AddSheetRequest As AddSheetRequest = New AddSheetRequest()
  142.         AddSheetRequest.Properties = New SheetProperties() With {
  143.             .Title = SheetName  '// Use System Name for new Sheet.
  144.         }
  145.         Dim AddSheetBatchUpdateRequest As BatchUpdateSpreadsheetRequest = New BatchUpdateSpreadsheetRequest()
  146.         AddSheetBatchUpdateRequest.Requests = New List(Of Request)()
  147.         AddSheetBatchUpdateRequest.Requests.Add(New Request() With {.AddSheet = AddSheetRequest})
  148.         '// Execute the request to create the new sheet.
  149.         Service.Spreadsheets.BatchUpdate(AddSheetBatchUpdateRequest, SpreadsheetId).Execute()
  150.     End Sub

  151.     '// ---------------------------------------------------------------------------------------------
  152.     '// Method to add columns and data to Google Sheets.
  153.     '// ---------------------------------------------------------------------------------------------
  154.     Private Sub AddDataColumns()
  155.         '// Specify the Range for data insertion.
  156.         Dim Range As String = SheetName + "!A1:B"
  157.         '// Create the ValueRange object.
  158.         Dim ValueRange As New ValueRange With {.Values = New List(Of IList(Of Object))()}
  159.         '// Add headers to ValueRange.
  160.         Dim Headers As New List(Of Object) From {"Part Name", "Description"}
  161.         ValueRange.Values.Add(Headers)
  162.         '// Populate values from ListView to ValueRange.
  163.         For Each item As ListViewItem In ListView1.Items
  164.             Dim RowValues As New List(Of Object)
  165.             RowValues.Add(item.SubItems(0).Text) ' Assuming the first column is at index 0
  166.             RowValues.Add(item.SubItems(1).Text) ' Assuming the second column is at index 1
  167.             ValueRange.Values.Add(RowValues)
  168.         Next
  169.         '// Create the request to update values.
  170.         Dim UpdateRequest As SpreadsheetsResource.ValuesResource.UpdateRequest = Service.Spreadsheets.Values.Update(ValueRange, SpreadsheetId, Range)
  171.         UpdateRequest.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.RAW
  172.         '// Execute the request to update values.
  173.         Dim UpdateResponse As UpdateValuesResponse = UpdateRequest.Execute()

  174.         'MessageBox.Show("Data added to Google Sheets successfully.")
  175.     End Sub

  176.     '// ---------------------------------------------------------------------------------------------
  177.     '// Method to remove a sheet name.
  178.     '// In fact, there is no need to pass parameters or sheet names to the subprogram.
  179.     '// But I Set aside time To use In other tasks.
  180.     '// ---------------------------------------------------------------------------------------------
  181.     Sub RemoveSheetByName(ByVal SheetName As String)
  182.         '// Get the list of sheets in the spreadsheet.
  183.         Dim spreadsheet = Service.Spreadsheets.Get(SpreadsheetId).Execute()
  184.         Dim sheets = spreadsheet.Sheets
  185.         '// Find the sheet by name.
  186.         Dim sheet = sheets.FirstOrDefault(Function(s) s.Properties.Title = SheetName)
  187.         '// This is necessary because the Google Sheets API primarily operates with sheet IDs,
  188.         '// and there's no direct method to delete a sheet by name.
  189.         If sheet IsNot Nothing Then
  190.             '// Get the sheet ID.
  191.             Dim sheetId = sheet.Properties.SheetId
  192.             '// Create a batch update request to remove the sheet.
  193.             Dim request = New Request With {
  194.                 .DeleteSheet = New DeleteSheetRequest With {
  195.                     .SheetId = sheetId
  196.                 }
  197.             }
  198.             Dim BatchUpdateRequest = New BatchUpdateSpreadsheetRequest With {
  199.                 .Requests = New List(Of Request) From {request}
  200.             }
  201.             '// Execute the batch update request.
  202.             Service.Spreadsheets.BatchUpdate(BatchUpdateRequest, SpreadsheetId).Execute()
  203.             MessageBox.Show("Sheet " & SheetName & " has been removed.", "Report Status", MessageBoxButtons.OK, MessageBoxIcon.Information)
  204.         Else
  205.             MessageBox.Show("Sheet " & SheetName & " not found.", "Report Status", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
  206.         End If
  207.     End Sub

  208.     '// ---------------------------------------------------------------------------------------------
  209.     '// Method to check if a sheet with a specific name exists.
  210.     '// ---------------------------------------------------------------------------------------------
  211.     Private Function SheetExists(ByVal SheetName As String) As Boolean
  212.         '// Get the list of sheets in the SpreadSheet.
  213.         Dim SpreadSheet = Service.Spreadsheets.Get(SpreadsheetId).Execute()
  214.         Dim sheets = SpreadSheet.Sheets
  215.         '// Check if a sheet with the specified name exists.
  216.         Return sheets.Any(Function(s) s.Properties.Title = SheetName)
  217.     End Function

  218.     Private Sub btnRemoveSheet_Click(sender As Object, e As EventArgs) Handles btnRemoveSheet.Click
  219.         Call RemoveSheetByName(SheetName)
  220.     End Sub
  221. End Class
คัดลอกไปที่คลิปบอร์ด


โมดูลของ Credentials เพื่อกำหนดสิทธิ์ในการเข้าถึงชีต ... คลิปวิดีโอในการรับไฟล์ Credentials (JSON) ...
  1. Imports Google.Apis.Auth.OAuth2
  2. Imports Google.Apis.Services
  3. Imports Google.Apis.Sheets.v4

  4. Module modCredentials
  5.     Public Service As SheetsService
  6.     Public SpreadsheetId As String = "1nBOWl-PDGwYng6IOifi6bhoLfvamTn-45CWtn5t59qs"
  7.     Public ApplicationName = "SampleSheet" '// Same as Filename.
  8.     '// JSON credential file path.
  9.     Public CredentialFilePath As String = MyPath(Application.StartupPath) & "credentials\GoogleSheet.json"

  10.     ' / ------------------------------------------------------------------------------------------------
  11.     '// Initialize Google Sheets API
  12.     Public Sub Credentials()
  13.         '// Load credentials from JSON file
  14.         Dim credential = GoogleCredential.FromFile(CredentialFilePath).CreateScoped(SheetsService.Scope.Spreadsheets)
  15.         '// Create Google Sheets API service
  16.         Service = New SheetsService(New BaseClientService.Initializer() With {
  17.             .HttpClientInitializer = credential,
  18.             .ApplicationName = ApplicationName
  19.         })
  20.     End Sub
  21. End Module
คัดลอกไปที่คลิปบอร์ด

โมดูลของฟังค์ชั่น ...
  1. Module modFucntion

  2.     ' / --------------------------------------------------------------------------------
  3.     ' / Get my project path
  4.     ' / AppPath = C:\My Project\bin\debug
  5.     ' / Replace "\bin\debug" with ""
  6.     ' / Return : C:\My Project\
  7.     Public Function MyPath(AppPath As String) As String
  8.         '/ Return Value
  9.         MyPath = AppPath.ToLower.Replace("\bin\debug", "").Replace("\bin\release", "").Replace("\bin\x86\debug", "")
  10.         '// If not found folder then put the \ (BackSlash ASCII Code = 92) at the end.
  11.         If Microsoft.VisualBasic.Right(MyPath, 1) <> Chr(92) Then MyPath = MyPath & Chr(92)
  12.     End Function

  13. End Module
คัดลอกไปที่คลิปบอร์ด

ดาวน์โหลดโค้ดต้นฉบับ VB.NET (2017) - .Net Framework 4.5+ ... ได้ที่นี่ ...

ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

x
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2024-11-27 19:33 , Processed in 0.147758 second(s), 5 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้