public static void DoExport(bool newSheet = false)
        {
            GDESettings settings = GDESettings.Instance;

            if (!GDEItemManager.FileChangedOnDisk(GDEItemManager.DataFilePath, settings.ExportFileMD5))
            {
                Debug.Log("GDE Data hasn't changed, skipping export.");
                return;
            }

            if (settings.ExportType.Equals(ImportExportType.Local) &&
                !string.IsNullOrEmpty(settings.ExportedLocalSpreadsheetName))
            {
                // take the local languages dictionary
                // write it out to an excel file
                GDEExcelDataHelper excelHelper = new GDEExcelDataHelper(settings.ExportedLocalSpreadsheetName, true);
                excelHelper.ExportToSheet(GDEItemManager.ItemListBySchema);
                settings.ExportFileMD5 = File.ReadAllText(GDEItemManager.DataFilePath).Md5Sum();
            }
            else if (settings.ExportType.Equals(ImportExportType.Google) &&
                     !string.IsNullOrEmpty(settings.ExportedGoogleSpreadsheetPath) &&
                     GDEDriveHelper.Instance.HasAuthenticated())
            {
                GDEDriveHelper.Instance.GetSpreadsheetList();

                string tempSheetPath = FileUtil.GetUniqueTempPathInProject() + "exportnewgoog_" + settings.ExportedGoogleSpreadsheetPath + ".xlsx";

                GDEExcelDataHelper excelHelper = new GDEExcelDataHelper(tempSheetPath, true);
                excelHelper.ExportToSheet(GDEItemManager.ItemListBySchema);

                if (newSheet)
                {
                    GDEDriveHelper.Instance.UploadNewSheet(tempSheetPath, settings.ExportedGoogleSpreadsheetPath);
                    settings.ExportFileMD5 = File.ReadAllText(GDEItemManager.DataFilePath).Md5Sum();
                }
                else
                {
                    GDEDriveHelper.Instance.UploadToExistingSheet(settings.ExportedGoogleSpreadsheetPath, tempSheetPath);
                    settings.ExportFileMD5 = File.ReadAllText(GDEItemManager.DataFilePath).Md5Sum();
                }
            }
            else
            {
                var window = EditorWindow.GetWindow<GameDataEditor.GDEExportExcel>(true, GDEConstants.ExportSpreadsheetLbl);
                window.LoadSettings();
                window.Show();
            }
        }
        static void ProcessSheet(string path)
        {
            try
            {
                GDEExcelDataHelper excelDataHelper = new GDEExcelDataHelper(path);
                excelDataHelper.OnUpdateProgress += delegate (string title, string msg, float progress) {
                    EditorUtility.DisplayProgressBar(title, msg, progress);
                };

                excelDataHelper.ProcessSheet();
            }
            catch(Exception ex)
            {
                Debug.LogError(ex);
            }
            finally
            {
                EditorUtility.ClearProgressBar();
            }
        }