/*auto readmore*/ /*auto readmore*/ /* an hien script*/ // an hien password /*an hien ma chuong trinh cong tru */ /*Scrollbox thanh cuon*/ /***Nhung CODE***/ /* dòng xanh dòng trắng */ /* https://cdnjs.com/libraries/prism lay thu vien, can vao ten file ma goi 1. copy link vao vi du:prism-python.min.js 2. ten ngon nua la python */ /*=== New posts ===*/ /*header slider*/ /*=== bai viet lien quan===*/ /*===tabcode===*/

[Database-Tự Học SQL] COM2012_MySQL Bài 4: DDL - Data Definition Language/Ngôn Ngữ Định Nghĩa Dữ Liệu

DDL - Data Definition Language/Ngôn ngữ định nghĩa dữ liệu: Có thể hiểu DDL là được dùng để định hình dữ liệu, tổ chức dữ liệu. 

Video DDL Căn bản


Video Alter Table


Lab 4



Một số câu lệnh DDL phổ biến:

I. CREATE: 
  1. Tạo mới database có tên là "quan_ly_nhan_su" và chọn "quan_ly_nhan_su" là database mặt định
  2. Tạo mới bảng phong_ban, tạo khóa chính cho bảng phong_ban
  3. Tạo mới bảng nhan_vien, khóa chính (cách 2), khóa ngoại, thiết lập quan hệ giữa bảng phong_ban và bảng nhan_vien
  4. Tương tự tạo bảng quanly_duan, khóa chính, khóa ngoại, thiết lập quan hệ giữa 2 bảng quanly_duan và nhan_vien

II. ALTER:

  1. Chuẩn bị dữ liệu(Tạo mới bảng du_an)
  2. Thêm cột: ngay_batdau, ngay_kethuc, ghichu vào bảng du_an
  3. Thay đổi data type/kiểu dữ liệu của cột/trường ghichu
  4. Rename tên cột ghichu thành ghi_chu và thay đổi kiểu dữ liệu/data type
  5. Xóa cột ghi_chu
  6. Xóa khóa chính trong bảng du_an
  7. Thêm ràng buộc khóa chính cho bảng du_an
  8. Thêm ràng buộc khóa ngoại cho bảng quanly_duan và thiết lập quan hệ với bảng du_an
  9. Thêm ràng buộc kiểm tra - CHECK cho bảng nhan_vien
  10. Thêm trường email vào bảng nhan_vien
  11. Thêm ràng buộc UNIQUE
  12. Tìm trong bảng nhan_vien nếu có tên ràng buộc là "unq_email" thì xóa bỏ
  13. Tạo bảng mới có tên tao_bang_cmd
  14. Đổi tên bảng tao_bang_cmd thành tên mới là bang_moi_doi_ten

III. RENAME
Đổi tên một đối tượng trong Database

IV. TRUNCATE
Xóa tất cả các bảng ghi/record của một bảng/table.

V. DROP
Dùng để xóa các đối tượng ĐANG TỒN TẠI trong cơ sở dữ liệu như: database, table, ...

How To Fix


THỰC HIỆN
Thực hiện trên MySQL Workbench 8.0

I. CREATE: 

1. Tạo mới database có tên là "quan_ly_nhan_su" và chọn "quan_ly_nhan_su" là database mặt định
CREATE DATABASE quan_ly_nhan_su;
USE quan_ly_nhan_su;
Kiểm tra:
-- Kiểm tra database đang tồn tại
SHOW DATABASES;

-- Xem database đang mặt định
SELECT DATABASE();

2. Tạo mới bảng phong_ban, tạo khóa chính cho bảng phong_ban

CREATE TABLE: Câu lệnh được sử dụng để tạo một bảng mới trong cơ sở dữ liệu.
Cú pháp:
CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    column3 datatype,
   ....
);
  • table_name: Tên bảng muốn đặt
  • column1, column2,...: Tên cột cần đặt
  • datatype: Kiểu dữ liệu của cột. Ví dụ: INT, CHAR, DATE,...
PRIMARY KEY/Khóa Chính: Ràng buộc xác định duy nhất mỗi bản ghi trong một bảng
FOREIGN KEY/Khóa ngoại: là một trường (hoặc tập hợp các trường) trong một bảng, tham chiếu đến PRIMARY KEY trong một bảng khác.
  • Bảng có khóa ngoại được gọi là bảng con
  • Bảng có khóa chính được gọi là bảng tham chiếu hoặc bảng cha.

CREATE TABLE phong_ban (
    ma_pb CHAR(5) PRIMARY KEY,
    ten_pb VARCHAR(255) NOT NULL,
    ma_truongphong INT
);

3. Tạo mới bảng nhan_vien, khóa chính (cách 2), khóa ngoại, thiết lập quan hệ giữa bảng phong_ban và bảng nhan_vien
CREATE TABLE quan_ly_nhan_su.nhan_vien (
    id_nhanvien INT AUTO_INCREMENT,
    ho_nv VARCHAR(255),
    ten_nv VARCHAR(10) NOT NULL,
    nam_sinh DATE,
    dia_chi VARCHAR(255),
    gioi_tinh BOOLEAN,
    luong INT NOT NULL,
    phg CHAR(5),
    PRIMARY KEY (id_nhanvien),
    FOREIGN KEY (phg) REFERENCES phong_ban (ma_pb)
);
Kiểm tra:
-- Tiểm tra sau khi tạo bảng/table
SHOW TABLES; 

-- Xem các thuộc tính của bảng nhan_vien
DESC quan_ly_nhan_su.nhan_vien;
SHOW CREATE TABLE quan_ly_nhan_su.nhan_vien;

4. Tương tự tạo bảng quanly_duan, khóa chính, khóa ngoại, thiết lập quan hệ giữa 2 bảng quanly_duan và nhan_vien
CREATE TABLE quanly_duan (
    ma_duan CHAR(5) NOT NULL,
    ma_nhanvien INT NOT NULL,
    ngay_thamgia DATE,
    ngay_ketthuc DATE,
    sogio INT,
    vai_tro VARCHAR(255),
    PRIMARY KEY (ma_duan, ma_nhanvien),
	FOREIGN KEY (ma_nhanvien) REFERENCES nhan_vien (id_nhanvien)
);

II. ALTER:
ALTER TABLE: Câu lệnh được sử dụng để thêm, xóa hoặc sửa đổi các cột trong bảng hiện có.
ALTER TABLE: Câu lệnh cũng được sử dụng để thêmbỏ các ràng buộc khác nhau trên một bảng hiện có.


1. Chuẩn bị dữ liệu(Tạo mới bảng du_an)
CREATE TABLE du_an (
    ma_duan CHAR(5),
    ten_duan VARCHAR(100),
    PRIMARY KEY (ten_duan)
);

2. Thêm cột: ngay_batdau, ngay_kethuc, ghichu vào bảng du_an
ALTER TABLE quan_ly_nhan_su.du_an
    ADD ngay_batdau DATE,
    ADD ngay_kethuc DATE,
    ADD ghichu INT;

3. Thay đổi data type/kiểu dữ liệu của cột/trường ghichu
-- Thay đổi data type/kiểu dữ liệu của cột/trường ghichu
ALTER TABLE quan_ly_nhan_su.du_an
    MODIFY COLUMN ghichu VARCHAR(15);

4. Rename tên cột ghichu thành ghi_chu và thay đổi kiểu dữ liệu/data type
- Rename tên cột ghichu thành ghi_chu và thay đổi kiểu dữ liệu/data type
ALTER TABLE quan_ly_nhan_su.du_an 
    CHANGE COLUMN ghichu ghi_chu VARCHAR(100);

5. Xóa cột ghi_chu
-- Xóa cột ghi_chu
ALTER TABLE quan_ly_nhan_su.du_an
    DROP COLUMN ghi_chu;

6. Xóa khóa chính trong bảng du_an
-- Xóa khóa chính trong bảng du_an
ALTER TABLE quan_ly_nhan_su.du_an 
    DROP PRIMARY KEY;

7. Thêm ràng buộc khóa chính cho bảng du_an
-- Thêm ràng buộc khóa chính cho bảng du_an
ALTER TABLE quan_ly_nhan_su.du_an
    ADD CONSTRAINT pk_ma_duan
    PRIMARY KEY (ma_duan);

8. Thêm ràng buộc khóa ngoại cho bảng quanly_duan và thiết lập quan hệ với bảng du_an
-- Thêm ràng buộc khóa ngoại cho bảng quanly_duan và thiết lập quan hệ với bảng du_an
ALTER TABLE quan_ly_nhan_su.quanly_duan
    ADD CONSTRAINT fk_quanly_duan_duan 
    FOREIGN KEY (ma_duan) 
    REFERENCES du_an(ma_duan);

9. Thêm ràng buộc kiểm tra - CHECK cho bảng nhan_vien
-- Thêm ràng buộc kiểm tra - CHECK cho bảng nhan_vien
ALTER TABLE quan_ly_nhan_su.nhan_vien
    ADD CONSTRAINT chk_luong 
    CHECK (luong >= 100); -- không chấp nhận dữ liệu >= 100

10. Thêm trường email vào bảng nhan_vien
-- Thêm trường email vào bảng nhan_vien
ALTER TABLE quan_ly_nhan_su.nhan_vien
    ADD email VARCHAR(100);

11. Thêm ràng buộc UNIQUE
-- Thêm ràng buộc UNIQUE
ALTER TABLE quan_ly_nhan_su.nhan_vien 
    ADD CONSTRAINT unq_email 
    UNIQUE (email); -- email là địa chỉ duy nhất

12. Tìm trong bảng nhan_vien nếu có tên ràng buộc là "unq_email" thì xóa bỏ
-- Tìm trong bảng nhan_vien nếu có tên ràng buộc là "unq_email" thì xóa bỏ
ALTER TABLE quan_ly_nhan_su.nhan_vien 
    DROP CONSTRAINT unq_email;

13. Tạo bảng mới có tên tao_bang_cmd
Create taBLE tao_bang_cmd(
	ma int primary key auto_INCREMENT,
	ten VARchar(50) not NULL,
	ngaySinh Date
);

Noted: Cố tình gõ code như vậy để biết là SQL KHÔNG PHÂN BIỆT chữ HOA, chữ thường

14. Đổi tên bảng tao_bang_cmd thành tên mới là bang_moi_doi_ten
-- Đổi tên bảng tao_bang_cmd thành tên mới là bang_moi_doi_ten
ALTER TABLE quan_ly_nhan_su.tao_bang_cmd 
    RENAME bang_moi_doi_ten;

III. RENAME

Đổi tên một đối tượng trong Database
RENAME TABLE quan_ly_nhan_su.bang_moi_doi_ten TO quan_ly_nhan_su.bang_moi_doi_ten_LAI;

IV. TRUNCATE

Xóa tất cả các bảng ghi/record của một bảng/table.
TRUNCATE - Xóa tất cả các bảng ghi/record của một bảng/table
TRUNCATE TABLE quan_ly_nhan_su.bang_moi_doi_ten_LAI;

V. DROP

Dùng để xóa các đối tượng ĐANG TỒN TẠI trong cơ sở dữ liệu như: database, table, ...
-- Dùng để xóa các đối tượng ĐANG TỒN TẠI trong cơ sở dữ liệu
DROP TABLE quan_ly_nhan_su.bang_moi_doi_ten_LAI;
-- hoặc
DROP TABLE IF EXISTS du_an; -- Kiểm tra nếu bảng đã tồn tại thì xóa bảng

DROP DATABASE quan_ly_nhan_su;

How To Fix
Trong quá trình xóa có khi gặp phải lỗi không thể xóa, các bạn tìm hiểu các lệnh dưới

SET FOREIGN_KEY_CHECKS = 1;
SET FOREIGN_KEY_CHECKS = 0;
SET GLOBAL FOREIGN_KEY_CHECKS=0;
SHOW VARIABLES LIKE "sql_safe_updates";
SET SQL_SAFE_UPDATES = 0;

xong!

[Database-Tự Học SQL] COM2034_SQL Server - Lab 1: Truy Vấn Đơn Giản

Tham khảo cách cài đặt SQL Server:

- Trên Windows tại đây

- Trên máy MAC

  • Download và cài đặt

sudo docker pull mcr.microsoft.com/azure-sql-edge

sudo docker run --cap-add SYS_PTRACE -e 'ACCEPT_EULA=1' -e 'MSSQL_SA_PASSWORD=P@ssw0rd' -p 1433:1433 --name sqledge -d mcr.microsoft.com/azure-sql-edge

P@ssw0rd: Mật khẩu đăng nhập SQL Server
sqledge: tên của SQL Server

  • Khởi động SQL
docker start sqledge

  • Kiểm tra SQL đã chạy chưa
docker ps


Tham khảo cách cài trên M1 Mac (ARM64) hoặc tại đây

NỘI DUNG:

A. Khởi tạo dữ liệu mẫu

B. Thực hiện truy vấn đơn giản

  1. Tìm các nhân viên làm việc ở phòng số 4
  2. Tìm các nhân viên có mức lương trên 30000
  3. Tìm các nhân viên có mức lương trên 25,000 ở phòng 4 hoặc các nhân viên có mức lương trên 30,000 ở phòng 5
  4. Cho biết họ tên đầy đủ của các nhân viên ở TP HCM
  5. Cho biết họ tên đầy đủ của các nhân viên có họ bắt đầu bằng ký tự 'N'
  6. Cho biết ngày sinh và địa chỉ của nhân viên Dinh Ba Tien.


THỰC HIỆN

A. Khởi tạo dữ liệu mẫu (Thực hiện trên SQL Server 2019)

CREATE DATABASE COM2034_Lab1
GO

USE COM2034_Lab1
GO
create table NHANVIEN (
	HONV nvarchar(15) NOT NULL,
	TENLOT nvarchar(15) NOT NULL,
	TENNV nvarchar(15) NOT NULL,
	MANV nvarchar(9) primary key,
	NGSINH date NOT NULL,
	DCHI nvarchar(30) NOT NULL,
	PHAI nvarchar(3) NOT NULL,
	LUONG float NOT NULL,
	MA_NQL nvarchar(9) NULL,
	PHG int NULL,
	
)
GO

insert into NHANVIEN values
(N'Đinh', N'Quỳnh', N'Như', '001', '1967-02-01', N'291 Hồ Văn Huê, TP HCM', N'Nữ', '43000', '006', '4'),
(N'Phan', N'Viet', N'The', '002', '1984-01-11', N'778 nguyễn kiệm , TP hcm', '', '30000', '001', '4'),
(N'Trần', N'Thanh', N'Tâm', '003', '1957-05-04', '34 Mai Thị Lự, Tp Hồ Chí Minh', N'Nam', '25000', '005', '5'),
(N'Nguyễn', N'Mạnh ', N'Hùng', '004', '1967-03-04', N'95 Bà Rịa, Vũng Tàu', N'Nam', '38000', '005', '5'),
(N'Nguyễn', N'Thanh', N'Tùng', N'005', N'1962-08-20', N'222 Nguyễn Văn Cừ, Tp HCM', N'Nam', '40000', '006', '5'),
(N'Phạm', N'Văn', N'Vinh', '006', '1965-01-01', N'15 Trưng Vương, Hà Nội', N'Nữ', '55000', NULL, '1'),
(N'Bùi', N'Ngọc', N'Hành', '007', '1954-03-11', N'332 Nguyễn Thái Học, Tp HCM', N'Nam', '25000', '001', '4'),
(N'Trần', N'Hồng', N'Quang', '008', '1967-09-01', N'80 Lê Hồng Phong, Tp HCM',N'Nam', '25000', '001', '4'),
(N'Đinh', N'Bá', N'Tiên', '009', '1960-02-11', N'119 Cống Quỳnh, Tp HCM', N'Nam', '30000', '005', '5'),
(N'Đinh', N'Bá', N'Tiên', '010', '1960-02-11', N'119 Cống Quỳnh, Tp HCM', N'Nam', '30000', '005', '5')
GO


B. Thực hiện truy vấn đơn giản

1. Tìm các nhân viên làm việc ở phòng số 4

SELECT * 
FROM NHANVIEN
WHERE dbo.NHANVIEN.PHG = 4;


2. Tìm các nhân viên có mức lương trên 30000

SELECT * 
FROM NHANVIEN
WHERE dbo.NHANVIEN.LUONG > 30000;


3. Tìm các nhân viên có mức lương trên 25,000 ở phòng 4 hoặc các nhân viên có mức lương trên 30,000 ở phòng 5

SELECT * 
FROM NHANVIEN
WHERE 
	(dbo.NHANVIEN.LUONG > 25000 AND dbo.NHANVIEN.PHG = 4)
	OR
	(dbo.NHANVIEN.LUONG > 30000 AND dbo.NHANVIEN.PHG = 5);


4. Cho biết họ tên đầy đủ của các nhân viên ở TP HCM

SELECT 
	CONCAT(dbo.NHANVIEN.HONV, ' ', dbo.NHANVIEN.TENLOT, ' ', dbo.NHANVIEN.TENNV) as 'Họ và Tên', 
	dbo.NHANVIEN.DCHI 
FROM NHANVIEN
WHERE 
	DCHI LIKE '%TP HCM%';


5. Cho biết họ tên đầy đủ của các nhân viên có họ bắt đầu bằng ký tự 'N'

SELECT 
	CONCAT(dbo.NHANVIEN.HONV, ' ', dbo.NHANVIEN.TENLOT, ' ', dbo.NHANVIEN.TENNV) as 'Họ và Tên'
FROM NHANVIEN
WHERE 
	dbo.NHANVIEN.HONV LIKE 'N%';


6. Cho biết ngày sinh và địa chỉ của nhân viên Dinh Ba Tien.

SELECT 
	CONCAT(dbo.NHANVIEN.HONV, ' ', dbo.NHANVIEN.TENLOT, ' ', dbo.NHANVIEN.TENNV) as 'Họ và Tên',
	dbo.NHANVIEN.NGSINH, 
	dbo.NHANVIEN.DCHI
FROM NHANVIEN
WHERE 
	dbo.NHANVIEN.HONV LIKE N'Đinh'
	AND
	dbo.NHANVIEN.HONV LIKE N'Bá'
	AND
	dbo.NHANVIEN.TENNV LIKE N'Tiên';


Hoặc:

SELECT
	CONCAT(dbo.NHANVIEN.HONV, ' ', dbo.NHANVIEN.TENLOT, ' ', dbo.NHANVIEN.TENNV) as 'Họ và Tên',
	dbo.NHANVIEN.NGSINH, 
	dbo.NHANVIEN.DCHI
FROM NHANVIEN
WHERE
	CONCAT(dbo.NHANVIEN.HONV, ' ', dbo.NHANVIEN.TENLOT, ' ', dbo.NHANVIEN.TENNV) LIKE N'%Đinh  Bá  Tiên%';

Xong!


Lập Trình Python Cho Excel/Python For Excel #007 - Chèn/Tách/Gộp Cột

NỘI DUNG:

Mở file "BangDuLieu_ngaunhien.xlsx" là thực hiện:

1. Tách cột B (Full Name) thành 2 cột Last Name và First Name

2. Gộp 2 cột Last Name (cột C) và First Name (cột D) thành Cột New Full Name (cột E)

3. Tách cột B (Full Name) thành 2 cột Last Name 2 và First Name 2 (Viết theo kiểu tìm hàng cuối cùng tự động)

THỰC HIỆN:

1. Tách cột B (Full Name) thành 2 cột Last Name và First Name

Code:

# === Tách cột
import xlwings as xw

wb = xw.Book(r"C:\tmp\BangDuLieu_ngaunhien.xlsx")
sht = wb.sheets.active

# === tách first name, last name
sht["C:D"].insert()
sht["C2:D2"].value = ["First Name", "Last Name"]

full_names = sht["B3:B11"].value
first_names =[]
last_names=[]

for full_name in full_names:
    # full_name = sht["D4"].value
    list_fullname = full_name.split(" ") # chuyển về list, căn cứ vào dấu khoảng trắng
    list_firstname = list_fullname[:-1] # lấy từ đầu cho đến phần tử gần cuối.
    first_names.append(" ".join(list_firstname))
    list_lastname = list_fullname[-1] # lấy phần tử cuối cùng
    last_names.append(list_lastname)
sht["C3"].options(transpose=True).value = first_names
sht["D3"].options(transpose=True).value = last_names


2. Gộp 2 cột Last Name (cột C) và First Name (cột D) thành Cột New Full Name (cột E)

Code:

# === Tách cột, gộp cột
import xlwings as xw

wb = xw.Book(r"C:\tmp\BangDuLieu_ngaunhien.xlsx")
sht = wb.sheets.active

# === tách first name, last name
sht["C:D"].insert()
sht["C2:D2"].value = ["First Name", "Last Name"]

full_names = sht["B3:B11"].value
first_names =[]
last_names=[]

for full_name in full_names:
    # full_name = sht["D4"].value
    list_fullname = full_name.split(" ") # chuyển về list, căn cứ vào dấu khoảng trắng
    list_firstname = list_fullname[:-1] # lấy từ đầu cho đến phần tử gần cuối.
    first_names.append(" ".join(list_firstname))
    list_lastname = list_fullname[-1] # lấy phần tử cuối cùng
    last_names.append(list_lastname)
sht["C3"].options(transpose=True).value = first_names
sht["D3"].options(transpose=True).value = last_names

# === gộp cột 
sht["E:E"].insert()
sht["E2"].value = "New Full Name"
list_fullname= sht ["C3:D11"].value
list_fullname_join =[]
for fn in list_fullname:
    list_fullname_join.append(" ".join(fn))
### HOẶC
# list_fullname_join = [" ".join(fn) for fn in list_fullname] 

sht["E3"].options(transpose=True).value = list_fullname_join


3. Tách cột B (Full Name) thành 2 cột Last Name 2 và First Name 2 (Viết theo kiểu tìm hàng cuối cùng tự động)

Code:

# === Tách cột (tìm hàng cuối cùng tự động)
import xlwings as xw

wb = xw.Book(r"C:\tmp\BangDuLieu_ngaunhien.xlsx")
sht = wb.sheets.active

# === HOẶC tách first name, last name TỐI ƯU
sht["C:D"].insert ()
sht["C2:D2"].value = ["First Name 2", "Last Name 2"]
last_row = sht[f"B{sht.cells.last_cell.row}"].end("up").row # tìm hàng cuối cùng trong cột B
full_names = sht[f"B3:B{last_row}"].value

def split_fullname(full_name): # hàm tách first name và last name
    list_fullname = full_name.split(" ")
    list_firstname = list_fullname[:-1]
    first_name =" ".join(list_firstname)
    last_name = list_fullname[-1] 
    return [first_name, last_name]

data_fullnames = list(map(split_fullname, full_names)) # trả list of list
sht["C3"].value = data_fullnames

Xong!

Lập Trình Python Cho Excel/Python For Excel #006 - Copy Trích Xuất Cột, Vẽ Biểu Đồ, Xử Lý Chuỗi

 NỘI DUNG:

Mở file "BangDuLieu_ngaunhien.xlsx" và thực hiện

1. Copy và trích xuất dữ liệu theo yêu cầu:

- Copy dữ liệu từ ô A1 đến ô C11 dán vào ô A15 (chỉ copy nội dung)
- Copy dữ liệu từ ô A1 đến ô C11 dán vào ô A15 và giữ nguyên định dạng
- Trích xuất dữ liệu cột B và cột C dán vào ô E3
- Chỉ trích xuất dữ liệu dòng thứ 3 của cột B và cột C dán vào cột H3

2. Vẽ biểu đồ vừa trích xuất (cột B và cột C) ở bản dữ liệu từ ô E3 đến F11

3. Xử lý chuỗi:

- Xử lý theo từng ô:
   + B3: ghi hoa cả cell,
   + B4: ghi hoa chữ đầu tiên của chuỗi,
   + B5: chuyển sang chữ thường,
   + B6: ghi hoa đầu mỗi chữ
- Xử lý theo cột (Ghi hoa từ ô B7 đến ô B9)
- Xử lý theo dòng (Ghi hoa từ ô A2 đến ô C2)

4. Ghi hoa đầu mỗi chữ cho cột B viết code theo kiểu COMPERHENSION


THỰC HIỆN:

1. Copy và trích xuất dữ liệu theo yêu cầu:

- Copy dữ liệu từ ô A1 đến ô C11 dán vào ô A15 (chỉ copy nội dung)
- Copy dữ liệu từ ô A1 đến ô C11 dán vào ô A15 và giữ nguyên định dạng
- Trích xuất dữ liệu cột B và cột C dán vào ô E3
- Chỉ trích xuất dữ liệu dòng thứ 3 của cột B và cột C dán vào cột H3

Code:

import xlwings as xw

wb = xw.Book(r"C:\tmp\BangDuLieu_ngaunhien.xlsx")
sht = wb.sheets.active

# === copy không mất định dạng
sht["A15"].value= sht["A1:C11"].value # chỉ copy giá trị, cách này mất định dạng
sht["A1:C11"].copy(sht["A30"]) # copy nguyên định dạng và giá trị

# === copy trích xuất cột B, cột C
range_zip = zip(sht["B2:B11"].value, sht["C2:C11"].value)
range_zip = list (range_zip)
sht["E2"].value = range_zip # copy toàn bộ

sht["H2"].value = range_zip[3] # lấy dòng thứ 3


2. Vẽ biểu đồ vừa trích xuất (cột B và cột C) ở bản dữ liệu từ ô E3 đến F11

Code:

# === Vẽ biểu đồ
chart1 = sht.charts.add(300, 250) # vị trí biểu đồ là trái tính qua 300, trên tính xuống là 250
chart1.set_source_data(sht["E3:F11"])
chart1.chart_type = "line_markers"
# chart1.chart_type = "3d_pie"
# chart1.chart_type = "stock_hlc"


3. Xử lý chuỗi:

- Xử lý theo từng ô:
   + B3: ghi hoa cả cell,
   + B4: ghi hoa chữ đầu tiên của chuỗi,
   + B5: chuyển sang chữ thường,
   + B6: ghi hoa đầu mỗi chữ
- Xử lý theo cột (Ghi hoa từ ô B7 đến ô B9)
- Xử lý theo dòng (Ghi hoa từ ô A2 đến ô C2)

Code:

import xlwings as xw

wb = xw.Book(r"C:\tmp\BangDuLieu_ngaunhien.xlsx")
sht = wb.sheets.active
full_name = str(sht["B3"].value)
sht["B3"].value = full_name.upper() # ghi hoa cả cell
sht["B4"].value = full_name.capitalize() # ghi hoa chữ đầu tiên
sht["B5"].value = full_name.lower() # ghi thường tòan cell
sht["B6"].value = full_name.title() # ghi hoa đầu mỗi chữ

# === xử lý chuỗi trong cột
full_name = sht["B7:B9"].value
full_name_list =[]
for fn in full_name:
    full_name_list.append(fn.upper()) #chữ hoa
sht["B7"].options(transpose = True).value = full_name_list

# === xử lý chuỗi theo hàng
tieu_de = sht["A2:C2"].value
tieu_de_list =[]
for td in tieu_de:
    tieu_de_list.append(td.upper())
sht["A2"].value = tieu_de_list


4. Ghi hoa đầu mỗi chữ cho cột B viết code theo kiểu COMPERHENSION

Code:

# === Xử lý chuỗi - theo cột
import xlwings as xw

wb = xw.Book(r"C:\tmp\BangDuLieu_ngaunhien.xlsx")
sht = wb.sheets.active

# ===HOẶC xử lý chuỗi trong cột (comprehension)
full_name = sht["B3:B11"].value
full_name_list_2 =[]
full_name_list_2 =[fn.title() for fn in full_name]
sht["B3"].options(transpose = True).value = full_name_list_2


Xong!

Lập Trình Python Cho Excel/Python For Excel #005 - Vùng Dữ Liệu/Size data, Tìm Cột/Hàng Đầu, Tìm Cột/Hàng Cuối

NỘI DUNG

Tìm vùng dữ liệu

Tìm hàng đầu tiên có chứa dữ liệu

Tìm cột đầu tiên có chứa dữ liệu


THỰC HIỆN

STT Yêu Cầu Cấu Hình Commands Giải Thích
1 range_data = sht.used_range.get_address(False,False,False,False) Vùng chứa dữ liệu
2 Tìm hàng đầu first_row = sht.used_range.row HOẶC Hàng đầu tiên có chứa dữ liệu
if sht["B1"].value != None:
    first_row =1
else:
    first_row =sht["B1"].end("down").row Tìm từ ô B1 và tìm xuống
3 Tổng số hàng đang chứa dữ liệu count_row = sht.used_range.rows.count Số hàng đang chứa dữ liệu
4 Tìm hàng cuối last_row = first_row + count_row - 1 Hàng cuối cùng có chứa dữ liệu
last_row = sht[f"B{sht.cells.last_cell.row}"].end("up").row HOẶC
5 Tìm cột cuối cùng last_col = sht.range(first_row,sht.cells.last_cell.column).end("left").column Cột cuối cùng có chứa dữ liệu
6 Tìm cột đầu tiên if sht["A1"] != None:
    first_col = 1
else:
    first_col = sht["A1"].end("right").column
first_column_UR = sht.used_range.column HOẶC


Xong!

Lập Trình Python Cho Excel/Python For Excel #004 - Ẩn/Hiện Thêm/Xóa Dòng Cột & Định Dạng (Number, Text, datetime)

NỘI DUNG:

1. Ẩn hiện dòng cột, wrap text, merge

2. Định dạng number, text, datetime


THỰC HIỆN

1. Ẩn hiện dòng cột, wrap text, merge

STT Yêu Cầu Cấu Hình Commands Giải Thích
1 Ẩn cột B đến cột D sht["B:D"].api.EntireColumn.Hidden = True Nếu muốn hiện thì gáng bằng False
2 Ẩn hàng 3 đến hàng 4 sht["3:4"].api.EntireColumn.Hidden = True Nếu muốn hiện thì gáng bằng False
3 Xóa dữ liệu sht["A13:C18"].clear() Xóa dữ liệu từ ô A13 đến ô C18
4 Chèn/Insert sht["C:C"].insert() Chèn thêm 1 cột vào vị trí cột C
sht["4:4"].insert() Chèn 1 dòng vào dòng thứ 4
5 Xóa/Delete sht["C:D"].delete() Xóa từ cột C đến cột D
sht["4:6"].delete() Xóa từ dòng thứ 4 đến dòng thứ 6
6 Wrap text sht["B13"].wrap_text = True Chữ tự động xuống dòng nếu dữ liệu trong ô B13 quá dài
7 Merge KHÔNG MẤT dữ liệu vl_B10 = sht["B10"].value Gán giá trị của ô B10 vào biến vl_B10
vl_C10 = sht["C10"].value Gán giá trị của ô C10 vào biến vl_C10/td>
sht["B10"].value = f"{vl_B10} {vl_C10}" nối chuỗi
sht["C10"].clear() Xóa dữ liệu của ô C10, nhằm mục đích khi merge không bị thông báo "chỉ giữ lại dữ liệu của ô đầu"
sht["B10:C10"].merge() Thực hiện merge


2. Định dạng number, text, datetime

STT Yêu Cầu Cấu Hình Commands Giải Thích
1 Định dạng kế toán sht["D3"].number_format = "[Red] #,###.000" Ô D3 là số, cứ 3 số cách nhau dấu phẩy, mà ô là màu đỏ
sht["D4"].number_format = "$ #,###.00" Định dạng kế toán và thêm dấu $ ở đầu
sht["D5"].number_format = "#,00 %" Định dạng phần trăm
2 Nối chuỗi sht["C3:C11"].number_format ='# "tuoi"' Nếu dữ liệu trong ô là SỐ thì thêm vào chữ "tuoi" phía sau
sht["B3:B11"].number_format ='@ "VCK"' Nếu dữ liệu trong ô là CHỮ thì thêm vào chữ "VCK" phía sau
3 Shrink To Fit sht["B3:B11"].api.ShrinkToFit = True Nếu chữ dài/nhiều hơn độ rộng của ô thì tự động co nhỏ lại cho vừa 1 dòng
4 Gán công thức sht["E11"].value = "=now()" Gán ô E11 có công thức là hàm now()
5 Định dạng sht["E11"].number_format= "dd-mm-yyyy" Định dạng ngày-tháng-năm
sht["E11"].number_format= "dd-mm-yyyy hh:mm AM/PM" Định dạng ngày-tháng-năm giờ phút theo múi 12 giờ
sht["E11"].number_format= "hh:mm AM/PM" Giờ phút múi giờ là 12


Ví dụ: Covert các text trong list dạng ngày-tháng-năm, gán vào cột D, bắt đầu từ ô D3, dữ liệu cột D tự động co lại cho vừa kích thước hiện tại của ô.

Code:

# === convert text to datetime
import xlwings as xw
from datetime import datetime

wb = xw.Book(r"C:\tmp\BangDuLieu_ngaunhien.xlsx")
sht = wb.sheets.active
list_date = ["12/12/2021", "15/08/2021","8/5/2021","9/12/2021","11/1/2021"]
list_convert = []
for i in range(0,len(list_date)):
    date_i = datetime.strptime(list_date[i], "%d/%m/%Y")
    list_convert.append(date_i)
sht["D3"].options(transpose = True).value = list_convert
sht["D:D"].api.ShrinkToFit = True 


Xong!

/*header slide*/