File size: 4,097 Bytes
d8535a4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
import pandas as pd
from io import BytesIO
from html_templates import logo, BigQuery_upload_title, table_id_placeholder, uploader, button_styles, tooltip_message_bq, Merger_title, tooltip_message_merger, uploader, Appended_data_title, download_button_styles, spinner_css



st.markdown(logo, unsafe_allow_html=True)
st.logo("alerter_4.jpeg")



st.markdown(Merger_title, unsafe_allow_html=True)
st.write("")
st.markdown(tooltip_message_merger, unsafe_allow_html = True)


st.markdown(uploader, unsafe_allow_html = True)
# File uploader for multiple CSV and Excel files
uploaded_files = st.file_uploader("", type=["csv", "xlsx", "xls"], accept_multiple_files=True)

if uploaded_files:
    # Initialize an empty list to store DataFrames
    st.markdown(spinner_css, unsafe_allow_html=True)
    with st.spinner('Processing your files...'):
        df_list = []

        for i, uploaded_file in enumerate(uploaded_files):
            # Get the file name without extension
            file_name = uploaded_file.name

            # Check the file type and read accordingly
            if uploaded_file.type == "text/csv":
                if i == 0:
                    # For the first file, include the header
                    df = pd.read_csv(uploaded_file)
                    # Store the columns from the first file
                    headers = df.columns
                else:
                    # For subsequent files, set the header using the stored headers
                    df = pd.read_csv(uploaded_file, names=headers, header=0)
            elif uploaded_file.type == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":
                if i == 0:
                    # For the first file, include the header
                    df = pd.read_excel(uploaded_file)
                    # Store the columns from the first file
                    headers = df.columns
                else:
                    # For subsequent files, set the header using the stored headers
                    df = pd.read_excel(uploaded_file, names=headers, header=0)

            elif uploaded_file.type == "application/vnd.ms-excel":
            # This is an .xls file
                if i == 0:
                # For the first file, include the header
                    df = pd.read_excel(uploaded_file, engine='xlrd')
                    # Store the columns from the first file
                    headers = df.columns
                else:
                    # For subsequent files, set the header using the stored headers
                    df = pd.read_excel(uploaded_file, names=headers, header=0, engine='xlrd')

            # Add a column for the file name
            df['file_name'] = file_name
            df_list.append(df)

        # Concatenate all DataFrames, ignoring index to avoid duplication
        merged_df = pd.concat(df_list, ignore_index=True)

        # Display the merged DataFrame
        st.dataframe(merged_df)

        # Create a layout with 3 columns for buttons
        col1, col2, col3 = st.columns(3)

    with col1:
        # Provide a download button for the merged CSV file
        csv_output = BytesIO()
        merged_df.to_csv(csv_output, index=False)
        csv_output.seek(0)
        st.markdown(download_button_styles, unsafe_allow_html = True)
        st.download_button(
            label="Download Merged CSV File",
            data=csv_output,
            file_name="merged_data.csv",
            mime="text/csv"
        )

    with col2:
        # Provide an option to convert to Excel
        excel_output = BytesIO()
        with pd.ExcelWriter(excel_output, engine='xlsxwriter') as writer:
            merged_df.to_excel(writer, index=False)
        excel_output.seek(0)
        st.markdown(download_button_styles, unsafe_allow_html = True)
        st.download_button(
            label="Download Merged Excel File",
            data=excel_output,
            file_name="merged_data.xlsx",
            mime="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
        )
else:
    st.write("")