Skip to content

Instantly share code, notes, and snippets.

@caingougou
Created January 4, 2022 10:39
Show Gist options
  • Save caingougou/e1d4f886b78c4c668b6cdddd3d672438 to your computer and use it in GitHub Desktop.
Save caingougou/e1d4f886b78c4c668b6cdddd3d672438 to your computer and use it in GitHub Desktop.
Serve Excel content as json api
from http.server import HTTPServer, BaseHTTPRequestHandler
import socket
import errno
import json
import openpyxl
from collections import OrderedDict
from itertools import islice
import sys
workbook = openpyxl.Workbook()
workbook = openpyxl.load_workbook(sys.argv[1])
data = []
try:
keys = next(workbook.active.values)
for row in islice(workbook.active.values, 1, workbook.active.max_row):
datum = OrderedDict()
for idx, k in enumerate(keys):
datum[k] = row[idx]
data.append(datum)
except Error as e:
print(e)
res = OrderedDict()
res['code'] = 200
res['data'] = data
class Resquest(BaseHTTPRequestHandler):
def do_OPTIONS(self):
self.send_response(200)
self.send_header('Access-Control-Allow-Origin', '*')
self.send_header('Access-Control-Allow-Methods', '*')
self.send_header('Access-Control-Allow-Headers', '*')
self.send_header('Cache-Control', 'no-store, no-cache, must-revalidate')
self.end_headers()
self.wfile.write("")
def do_GET(self):
self.send_response(200)
self.send_header('Access-Control-Allow-Origin', '*')
self.send_header('Access-Control-Allow-Methods', '*')
self.send_header('Access-Control-Allow-Headers', '*')
self.send_header('Cache-Control', 'no-store, no-cache, must-revalidate')
self.send_header('Content-type', 'application/json')
self.end_headers()
self.wfile.write(json.dumps(res).encode())
if __name__ == '__main__':
host = '0.0.0.0'
port = 8888
while port < 8900:
try:
server = HTTPServer((host, port), Resquest)
print("Starting server, listen at: %s:%s" % (host, port))
server.serve_forever()
except socket.error as e:
if e.errno == errno.EADDRINUSE:
inuse_port = port
port += 1
print("Port '{}' is already in use. Try new port '{}'".format(inuse_port, port))
continue
else:
print(e)
break
@caingougou
Copy link
Author

how to use

python /path/to/serve_excel.py ~/path/to/sample.xlsx

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment