範例一、取得最近漁產品交易行情資料並儲存成Word檔案
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 | import requests
import json
from docx import Document
# 從URL取得JSON資料
r = requests.get('https://data.moa.gov.tw/Service/OpenData/FromM/AquaticTransData.aspx')
json_data = json.loads(r.text)
# 建立一個新的Word文件
doc = Document()
doc.add_heading('漁產品交易行情', level=1)
# 寫入標題行
headers = ['交易日期', '品種代碼', '魚貨名稱', '市場名稱', '上價', '中價', '下價', '交易量', '平均價']
table = doc.add_table(rows=1, cols=len(headers))
hdr_cells = table.rows[0].cells
for idx, header in enumerate(headers):
hdr_cells[idx].text = header
# 寫入資料
for item in json_data:
row = [
item.get('交易日期'),
item.get('品種代碼'),
item.get('魚貨名稱'),
item.get('市場名稱'),
str(item.get('上價')),
str(item.get('中價')),
str(item.get('下價')),
str(item.get('交易量')),
str(item.get('平均價'))
]
row_cells = table.add_row().cells
for idx, cell_value in enumerate(row):
row_cells[idx].text = str(cell_value)
# 儲存到Word檔案
doc.save('AquaticTransData.docx')
print("資料已儲存到 AquaticTransData.docx")
|
執行結果:
資料已儲存到 AquaticTransData.docx
開啟AquaticTransData.docx的畫面如下:
範例二、加上格線
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 | import requests
import json
from docx import Document
from docx.oxml import OxmlElement
from docx.oxml.ns import qn
# 從URL取得JSON資料
r = requests.get('https://data.moa.gov.tw/Service/OpenData/FromM/AquaticTransData.aspx')
json_data = json.loads(r.text)
# 建立一個新的Word文件
doc = Document()
doc.add_heading('漁產品交易行情', level=1)
# 寫入標題行
headers = ['交易日期', '品種代碼', '魚貨名稱', '市場名稱', '上價', '中價', '下價', '交易量', '平均價']
table = doc.add_table(rows=1, cols=len(headers))
hdr_cells = table.rows[0].cells
for idx, header in enumerate(headers):
hdr_cells[idx].text = header
# 寫入資料
for item in json_data:
row = [
item.get('交易日期'),
item.get('品種代碼'),
item.get('魚貨名稱'),
item.get('市場名稱'),
str(item.get('上價')),
str(item.get('中價')),
str(item.get('下價')),
str(item.get('交易量')),
str(item.get('平均價'))
]
row_cells = table.add_row().cells
for idx, cell_value in enumerate(row):
row_cells[idx].text = str(cell_value)
# 設置表格邊框
def set_table_border(table):
tbl = table._element
tbl_pr = tbl.tblPr
tbl_borders = OxmlElement('w:tblBorders')
for border_name in ['top', 'left', 'bottom', 'right', 'insideH', 'insideV']:
border = OxmlElement(f'w:{border_name}')
border.set(qn('w:val'), 'single')
border.set(qn('w:sz'), '4')
border.set(qn('w:space'), '0')
border.set(qn('w:color'), 'auto')
tbl_borders.append(border)
tbl_pr.append(tbl_borders)
# 加上格線
set_table_border(table)
# 儲存到Word檔案
doc.save('AquaticTransData.docx')
print("資料已儲存到 AquaticTransData.docx")
|
執行結果:
資料已儲存到 AquaticTransData.docx
開啟AquaticTransData.docx的畫面如下:
範例三、轉成PDF
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 | import requests
import json
from docx import Document
from docx.oxml import OxmlElement
from docx.oxml.ns import qn
from docx2pdf import convert
# 從URL取得JSON資料
r = requests.get('https://data.moa.gov.tw/Service/OpenData/FromM/AquaticTransData.aspx')
json_data = json.loads(r.text)
# 建立一個新的Word文件
doc = Document()
doc.add_heading('漁產品交易行情', level=1)
# 寫入標題行
headers = ['交易日期', '品種代碼', '魚貨名稱', '市場名稱', '上價', '中價', '下價', '交易量', '平均價']
table = doc.add_table(rows=1, cols=len(headers))
hdr_cells = table.rows[0].cells
for idx, header in enumerate(headers):
hdr_cells[idx].text = header
# 寫入資料
for item in json_data:
row = [
item.get('交易日期'),
item.get('品種代碼'),
item.get('魚貨名稱'),
item.get('市場名稱'),
str(item.get('上價')),
str(item.get('中價')),
str(item.get('下價')),
str(item.get('交易量')),
str(item.get('平均價'))
]
row_cells = table.add_row().cells
for idx, cell_value in enumerate(row):
row_cells[idx].text = str(cell_value)
# 設置表格邊框
def set_table_border(table):
tbl = table._element
tbl_pr = tbl.tblPr
tbl_borders = OxmlElement('w:tblBorders')
for border_name in ['top', 'left', 'bottom', 'right', 'insideH', 'insideV']:
border = OxmlElement(f'w:{border_name}')
border.set(qn('w:val'), 'single')
border.set(qn('w:sz'), '4')
border.set(qn('w:space'), '0')
border.set(qn('w:color'), 'auto')
tbl_borders.append(border)
tbl_pr.append(tbl_borders)
# 加上格線
set_table_border(table)
# 儲存到Word檔案
word_filename = 'AquaticTransData.docx'
pdf_filename = 'AquaticTransData.pdf'
doc.save(word_filename)
# 轉換為PDF
convert(word_filename, pdf_filename)
print(f"資料已儲存到 {pdf_filename}")
|
執行結果:
0%| | 0/1 [00:00<?, ?it/s]
100%|██████████| 1/1 [00:45<00:00, 45.97s/it]
100%|██████████| 1/1 [00:46<00:00, 46.15s/it]
資料已儲存到 AquaticTransData.pdf
開啟AquaticTransData.pdf的畫面如下: