Logging data from Arduino to Excel - Lưu dữ liệu từ Arduino vào tệp Excel trên máy tính thông qua C#

I. Giới thiệu

Xin chào các bạn, hôm nay mình sẽ giải đáp thắc mắc : Làm thế nào để ghi dữ liệu vào Excel thông qua C#? Mình cũng thấy trên cộng đồng có bài viết rất hay của a NTP_PRO nói về vấn đề này rồi, nhưng a NTP_PRO sử dụng Processing. Nhưng hôm nay, mình sẽ hướng dẫn các bạn bằng C# - Một hướng tiếp cận rất hay!!!

II. Tiến hành thôi

a. Cách thức

- Đầu tiên, các bạn mở Visual C# và tạo 1 Console Application. Thực hiện với chương trình Console - làm việc gần gũi với ngôn ngữ C#. Chỉ cần thực hiện thành công trên Console Application là các bạn có thể làm trên WinForm ngon lành thoy!!!

Sau đó, bạn có 1 Project Console Application, để làm 1 chương trình ghi dữ liệu vào Excel...Trước tiên, bạn Add Library thư viện dùng cho Microsoft Office Excel bằng cách sau :

- Chọn Project >> Add Reference

- Hộp thoại Add Reference hiện ra, bạn chọn thẻ COM...Chọn Library muốn Add, ở đây là Microsoft Office Excel Library...(version bn đó, tùy vào bạn đang sử dụng Office phiên bản nào)

Sau đó, các bạn kết nối using namespace:

using Excel = Microsoft.Office.Interop.Excel;

Đối tượng của excel này bao gồm: - Application (chương trình excel) - Workbook (file xls làm việc, có nhiều workbook trong app) - Worksheet (có nhiều worksheet trong workbook)

// Khởi động chtr Excell
Excel.Application exApp = new Excel.Application();
 
// Thêm file temp xls
Excel.Workbook exBook = exApp.Workbooks.Add(
          Excel.XlWBATemplate.xlWBATWorksheet );
 
// Lấy sheet 1.
Excel.Worksheet exSheet = (Excel.Worksheet)exBook.Worksheets[1];

Thay vì tạo 1 file Temp excel thì mình cũng có thể mở 1 file excel có sẵn:

string workbookPath = "c:/SomeWorkBook.xls";
 
COMExcel.Workbook exBook = exApp.Workbooks.Open(workbookPath,
        0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "",
        true, false, 0, true, false, false);

Sau đó nếu mình sử dụng:

exSheet.Name = "Arduino.vn";

Thì Sheet của Excel sẽ như thế này:

Tiếp tục là Range (nó là một khối ô select, nó cũng có thể chỉ là 1 ô) Như vậy để ghi dữ liệu lên Ô thứ (A1) thì chúng ta sẽ làm như sau:

// Range là ô [1,1] (A1)
COMExcel.Range r = (COMExcel.Range) exSheet.Cells[1, 1];
 
// Ghi dữ liệu
r.Value2 = "Demo excel value";
 
// Giãn cột
r.Columns.AutoFit();
 
// Hiển thị chương trình excel
exApp.Visible = true;
 
// Đóng chương trình excel
Console.WriteLine("Đợi file Excel chạy");
Console.ReadLine();
exApp.Quit();

Hoặc bạn cũng có thể làm việc theo 1 khối như sau:

COMExcel.Range r = (COMExcel.Range)exSheet.get_Range("A1", "A4");
r.Value2 = "My Value";            
r.Columns.AutoFit();

Công việc cuối cùng là save file nếu như bạn ko muốn hiện cửa sổ:

// Ẩn chương trình
exApp.Visible = false;    
 
// Save file
exBook.SaveAs("C:\\file.xls", COMExcel.XlFileFormat.xlWorkbookNormal,
                null,null,false,false,
                COMExcel.XlSaveAsAccessMode.xlExclusive,
                false,false,false,false,false);
exApp.Quit();

Excel là một đối tượng dạng COM và ngoài sự quản lý của CLR nên tốt nhất cuối cùng bạn nên khử đối tượng này.

exBook.Close(false, false, false);
exApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(exBook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(exApp);

b. Full Code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Threading;
using Excel;



namespace Ghi_du_lieu_Excel
{
    class Program
    {
        static void Main(string[] args)
        {
            Excel.Application exApp = new Excel.Application();

            Excel.Workbook exBook = exApp.Workbooks.Add(
            Excel.XlWBATemplate.xlWBATWorksheet);

            // Lấy sheet 1.
            Excel.Worksheet exSheet = (Excel.Worksheet)exBook.Worksheets[1];
            exSheet.Name = "Arduino.vn";
            // Range là ô [1,1] (A1)
            Excel.Range a = (Excel.Range)exSheet.Cells[1, 1];
            Excel.Range t = (Excel.Range)exSheet.Cells[2, 1];

            // Ghi dữ liệu
            a.Value2 = "Cộng đồng Arduino";
            t.Value2 = "Đỗ Hữu Toàn";

            // Giãn cột
            a.Columns.AutoFit();
            Console.WriteLine("Đang chạy file Excel lên");
            // Hiển thị chương trình excel
            exApp.Visible = true;  
            Thread.Sleep(5000);
            // Ẩn chương trình
            exApp.Visible = false;

            // Save file
            exBook.SaveAs("E:\\file.xls", Excel.XlFileFormat.xlWorkbookNormal,
                            null, null, false, false,
                            Excel.XlSaveAsAccessMode.xlExclusive,
                            false, false, false, false, false);

            exBook.Close(false, false, false);
            exApp.Quit();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(exBook);
        }
    }
}

c. Thành quả:

 

III. Lời kết

Trên đây, là cách ghi dữ liệu vào Excel bằng C#, các bạn có thể kết hợp với bài C# ( C Sharp ) - Nhận dữ liệu từ Arduino của mình để tạo ra những dự án thú vị. Vào những bài tiếp theo, mình sẽ nói rõ hơn về nó. Các bạn hãy chờ đợi Series bài viết về C# của mình nhé.

lên
52 thành viên đã đánh giá bài viết này hữu ích.
Chuyên mục: 
Các dự án được truyền cảm hứng

Cánh tay robot 4 bậc tự do - Điều khiển bằng máy tính dùng LABVIEW

Thông qua các phương tiện thông tin trên các diễn đàn Internet và các trung tâm học tập thực hành, cho thấy nhu cầu học tập và nghiên cứu cũng như tự mày mò tìm hiểu về nhiều lĩnh vực trong ngành điện điện tử nói chung và ngành tự động hóa nói riêng là rất cao. Hiện nay trong các nhà máy có các dây chuyền sản xuất, có rất nhiều các tay máy hoạt động. Robot công nghiệp đã có mặt trong sản xuất từ nhiều năm trước, ngày nay robot công nghiệp được dùng ở nhiều lĩnh vực sản xuất. đó là xuất phát từ những ưu điểm mà robot đó đã được chọn và đúc kêt lại trong quá trình sản xuất, robot có những tính năng mà con người không thể có được, khả năng làm việc ổn định,làm việc trong môi trường độc hại. Do đó việc đầu tư nghiên cứu, chế tạo ra những loại robot phục vụ cho công cuộc tự động hóa sản xuất là rất cần thiết cho hiện tại và trong tương lai.

lên
18 thành viên đã đánh giá bài viết này hữu ích.
Các bài viết cùng tác giả

Kết nối tay game PlayStation với Arduino

Bài viết trước mình đã giới thiệu với các bạn về Joystick, đó chính là phím di chuyển trên tay PlayStation. Nhưng các bạn hãy quan sát trong các kỳ thi robocon, hầu hết các thí sinh đều dùng tay PlayStation để điều khiển robot. Vậy làm sao để sử dụng tay PlayStation ??

lên
22 thành viên đã đánh giá bài viết này hữu ích.

Chạy đa nhiệm trên Arduino với FreeRTOS

Khi chúng ta làm 1 project lớn, bạn sẽ phải viết chương trình thực hiện nhiều chức năng. Và khi đó, bạn sẽ gặp nhiều vấn đề phức tạp : làm như thế nào để chương trình hoạt động ổn định khi kết hợp nhổi nhét nhiều đoạn code đơn giản thành 1 khối thống nhất?. Ở bài viết này, chúng ta cùng đi giải quyết vấn đề trên. Trên Arduino.vn cũng đã có nhiều bài viết về xử lý bất đồng bộ rất hay. Các bạn có thể xem tại đây. Vậy mục đích viết bài của mình hôm nay là gì? Hôm nay mình sẽ giới thiệu một thư viện đa nhiệm mới khác, đó chính là FreeRTOS

lên
14 thành viên đã đánh giá bài viết này hữu ích.