| 
									
										
										
										
											2023-06-25 09:36:58 +00:00
										 |  |  | // @deno-types="https://cdn.sheetjs.com/xlsx-0.20.0/package/types/index.d.ts"
 | 
					
						
							|  |  |  | import { read, utils, set_cptable, version } from 'https://cdn.sheetjs.com/xlsx-0.20.0/package/xlsx.mjs'; | 
					
						
							|  |  |  | import * as cptable from 'https://cdn.sheetjs.com/xlsx-0.20.0/package/dist/cpexcel.full.mjs'; | 
					
						
							| 
									
										
										
										
											2023-06-06 10:01:12 +00:00
										 |  |  | set_cptable(cptable); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import * as Drash from "https://deno.land/x/drash@v2.5.4/mod.ts"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class SheetJSResource extends Drash.Resource { | 
					
						
							|  |  |  |   public paths = ["/"]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   public OPTIONS(request: Drash.Request, response: Drash.Response) { | 
					
						
							|  |  |  |     const allHttpMethods: string[] = [ "GET", "POST", "PUT", "DELETE" ]; | 
					
						
							|  |  |  |     response.headers.set("Allow", allHttpMethods.join()); | 
					
						
							|  |  |  |     response.headers.set("Access-Control-Allow-Methods", allHttpMethods.join()); | 
					
						
							|  |  |  |     response.headers.set("access-control-allow-origin", "*"); | 
					
						
							|  |  |  |     response.status_code = 204; | 
					
						
							|  |  |  |     return response; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   public POST(request: Drash.Request, response: Drash.Response) { | 
					
						
							|  |  |  |     const file = request.bodyParam<Drash.Types.BodyFile>("file"); | 
					
						
							|  |  |  |     const type = request.bodyParam<string>("type"); | 
					
						
							|  |  |  |     try { response.headers.set("access-control-allow-origin", "*"); } catch(e) {} | 
					
						
							|  |  |  |     if (!file) throw new Error("File is required!"); | 
					
						
							|  |  |  |     var wb = read(file.content, {type: "buffer", dense: true}); | 
					
						
							|  |  |  |     return response.html( (type == "csv" ? utils.sheet_to_csv : utils.sheet_to_html)(wb.Sheets[wb.SheetNames[0]])); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   public GET(request: Drash.Request, response: Drash.Response): void { | 
					
						
							|  |  |  |     try { response.headers.set("access-control-allow-origin", "*"); } catch(e) {} | 
					
						
							|  |  |  |     return response.html(`\
 | 
					
						
							|  |  |  | <!DOCTYPE html> | 
					
						
							|  |  |  | <html> | 
					
						
							|  |  |  |   <head> | 
					
						
							|  |  |  |     <title>SheetJS Spreadsheet to HTML Conversion Service</title> | 
					
						
							|  |  |  |     <meta charset="utf-8" /> | 
					
						
							|  |  |  | <style> | 
					
						
							|  |  |  | * { | 
					
						
							|  |  |  | 	padding: 0; | 
					
						
							|  |  |  | 	margin: 0; | 
					
						
							|  |  |  | 	box-sizing: border-box; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | html, body { | 
					
						
							|  |  |  | 	width: 100vw; | 
					
						
							|  |  |  | 	max-width: 100%; | 
					
						
							|  |  |  | 	font-size: 16px; | 
					
						
							|  |  |  | 	font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; | 
					
						
							|  |  |  | 	-webkit-font-smoothing: antialiased; | 
					
						
							|  |  |  | 	background: white; | 
					
						
							|  |  |  | 	color: black; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | body { | 
					
						
							|  |  |  | 	padding-top: 5px; | 
					
						
							|  |  |  |   max-width: 760px; | 
					
						
							|  |  |  |   margin-left: auto; | 
					
						
							|  |  |  |   margin-right: auto; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | table { | 
					
						
							|  |  |  |   border-collapse: collapse; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | table, tr, th, td { border: 1px solid; } | 
					
						
							|  |  |  | div { | 
					
						
							|  |  |  |   padding: 5px; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | li { margin: 5px 0;} | 
					
						
							|  |  |  | </style> | 
					
						
							|  |  |  |   </head> | 
					
						
							|  |  |  |   <body> | 
					
						
							|  |  |  | <h2><a href="//sheetjs.com/">SheetJS</a> Spreadsheet Conversion Service</h2> | 
					
						
							|  |  |  | <br/> | 
					
						
							|  |  |  | <h3>API</h3> | 
					
						
							|  |  |  | <br/> | 
					
						
							|  |  |  | Send a <code>POST</code> request to <a id="u">https://s2c.sheetjs.com</a> with the file in the <code>file</code> body parameter:<br/>
 | 
					
						
							|  |  |  | <br/> | 
					
						
							|  |  |  | <pre> | 
					
						
							|  |  |  |     curl -X POST -F"file=@pres.numbers" <span id="v">https://s2c.sheetjs.com/</span>
 | 
					
						
							|  |  |  | </pre> | 
					
						
							|  |  |  | <br/> | 
					
						
							|  |  |  | The response will be an HTML TABLE generated from the first worksheet. | 
					
						
							|  |  |  | <br/><br/> | 
					
						
							|  |  |  | For CSV data, pass the parameter <code>type=csv</code>:<br/> | 
					
						
							|  |  |  | <br/> | 
					
						
							|  |  |  | <pre> | 
					
						
							|  |  |  |     curl -X POST -F"file=@pres.numbers" -F"type=csv" <span id="w">https://s2c.sheetjs.com/</span>
 | 
					
						
							|  |  |  | </pre> | 
					
						
							|  |  |  | <br/><br/> | 
					
						
							|  |  |  | <h3>Try it out!</h3> | 
					
						
							|  |  |  | <br/> | 
					
						
							|  |  |  | <form action="/" method="post" enctype="multipart/form-data"> | 
					
						
							|  |  |  | <input type="file" name="file" /><br/><br/> | 
					
						
							|  |  |  | Use the file input element to select a file, then click "Submit"<br/><br/> | 
					
						
							|  |  |  | <button type="submit">Submit</button><br/><br/> | 
					
						
							|  |  |  | </form> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SheetJS Library Version: <code>${version}</code> | 
					
						
							|  |  |  |   </body> | 
					
						
							|  |  |  |   <script>w.innerHTML = v.innerHTML = u.innerHTML = u.href = window.location;</script> | 
					
						
							|  |  |  | </html>`,
 | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const server = new Drash.Server({ | 
					
						
							|  |  |  |   hostname: "", | 
					
						
							|  |  |  |   port: 3000, | 
					
						
							|  |  |  |   protocol: "http", | 
					
						
							|  |  |  |   resources: [ | 
					
						
							|  |  |  |     SheetJSResource, | 
					
						
							|  |  |  |   ], | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | server.run(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | console.log(`Server running at ${server.address}.`); | 
					
						
							|  |  |  | 
 |