-
Notifications
You must be signed in to change notification settings - Fork 153
/
excel.py
112 lines (85 loc) · 2.83 KB
/
excel.py
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import argparse
import glob
import sys
import numpy
import openpyxl
from . import las
class ExcelConverter(object):
'''
Arguments:
las: LASFile object
'''
def __init__(self, las):
self.set_las(las)
def set_las(self, las):
self.las = las
self.generate_workbook()
return self
def generate_workbook(self):
wb = openpyxl.Workbook()
header = wb['Sheet']
# header = wb.create_sheet()
header.title = 'Header'
curves = wb.create_sheet()
curves.title = 'Curves'
def write_cell(sh, i, j, value):
c = sh.cell(row=i + 1, column=j + 1)
c.value = value
write_cell(header, 0, 0, 'Section')
write_cell(header, 0, 1, 'Mnemonic')
write_cell(header, 0, 2, 'Unit')
write_cell(header, 0, 3, 'Value')
write_cell(header, 0, 4, 'Description')
sections = [
('~Version', self.las.version),
('~Well', self.las.well),
('~Parameter', self.las.params),
('~Curves', self.las.curves),
]
n = 1
for sect_name, sect in sections:
for i, item in enumerate(sect.values()):
write_cell(header, n, 0, sect_name)
write_cell(header, n, 1, item.mnemonic)
write_cell(header, n, 2, item.unit)
write_cell(header, n, 3, item.value)
write_cell(header, n, 4, item.descr)
n += 1
for i, curve in enumerate(self.las.curves):
write_cell(curves, 0, i, curve.mnemonic)
for j, value in enumerate(curve.data):
if numpy.isnan(value):
write_cell(curves, j + 1, i, '')
else:
write_cell(curves, j + 1, i, value)
self.workbook = wb
return self
def write(self, xlsxfn):
assert xlsxfn.lower().endswith('.xlsx')
self.workbook.save(xlsxfn)
def main():
args = get_parser().parse_args(sys.argv[1:])
lasfn = args.LAS_filename
xlsxfn = args.XLSX_filename
l = las.LASFile(lasfn)
converter = ExcelConverter(l)
converter.write(xlsxfn)
def get_parser():
parser = argparse.ArgumentParser('Convert LAS file to XLSX')
parser.add_argument('LAS_filename')
parser.add_argument('XLSX_filename')
return parser
def main_bulk():
args = get_bulk_parser().parse_args(sys.argv[1:])
for lasfn in glob.glob(args.glob):
xlsxfn = lasfn.replace('.las', '.xlsx')
print('%s -> %s' % (lasfn, xlsxfn))
l = las.LASFile(lasfn)
converter = ExcelConverter(l)
converter.write(xlsxfn)
def get_bulk_parser():
parser = argparse.ArgumentParser('Convert LAS files')
parser.add_argument('--glob', default='*.las')
return parser
if __name__ == '__main__':
main()