This will print every thing from row 1;
list_with_values=[]
for cell in ws[1]:
list_with_values.append(cell.value)
If for some reason you want to get a list of the column letters that are filled in you can just:
column_list = [cell.column for cell in ws[1]]
For your 2nd question; Assuming you have stored the header values in a list called: "list_with_values"
from openpyxl import Workbook
wb = Workbook()
ws = wb['Sheet']
#Sheet is the default sheet name, you can rename it or create additional ones with wb.create_sheet()
ws.append(list_with_values)
wb.save('OutPut.xlsx')