public void GetSheetUrlBySheetId()
    {
        var expected = $"https://docs.google.com/spreadsheets/d/{sheetID}/edit";
        var actual   = GoogleSpreadSheetHelper.GetSheetUrl(sheetID);

        Assert.AreEqual(expected, actual);
    }
    public void ConvertR1C1ToRangeAAA1()
    {
        var actual   = GoogleSpreadSheetHelper.ConvertR1C1ToA1(1, 27 + (int)Math.Pow(27, 2));
        var expected = "AAA1";

        Assert.AreEqual(expected, actual);
    }
    public void ConvertR1C1ToRangeA1()
    {
        var actual   = GoogleSpreadSheetHelper.ConvertR1C1ToA1(1, 1);
        var expected = "A1";

        Assert.AreEqual(expected, actual);
    }
    public void GetSheetUrlBySheetIdAndGIDAndRange()
    {
        var expected = $"https://docs.google.com/spreadsheets/d/{sheetID}/edit#gid=0&range=A1";
        var actual   = GoogleSpreadSheetHelper.GetSheetUrl(sheetID, 0.ToString(), "A1");

        Assert.AreEqual(expected, actual);
    }
    public void ConvertR1C1ToRangeAZY1()
    {
        var cycle    = 27;
        var actual   = GoogleSpreadSheetHelper.ConvertR1C1ToA1(1, ((int)Math.Pow(cycle, 2)) + ((int)Math.Pow(cycle, 2) - cycle) + (cycle - 2));
        var expected = "AZY1";

        Assert.AreEqual(expected, actual);
    }
    public void ConvertR1C1ToRangeAZ1()
    {
        var cycle    = 27;
        var actual   = GoogleSpreadSheetHelper.ConvertR1C1ToA1(1, cycle + (cycle - 1));
        var expected = "AZ1";

        Assert.AreEqual(expected, actual);
    }
예제 #7
0
        private void AddErrorLogScrollViewContent(ValidationResult result, MasterBuilderEditorWindowConfig config, Dictionary <string, Dictionary <string, string> > sheetNameDictionary)
        {
            var button = new Button();

            button.Add(new Label(result.Message));
            button.clicked += () =>
            {
                var tableProperties = sheetNameDictionary[result.Location.TableName];
                var tableGID        = tableProperties["SheetId"];

                var url = (result.Location.LocationType == RecordLocationType.SingleRecord)
                    ? GoogleSpreadSheetHelper.GetSheetUrl(config.spreadsheetID, tableGID)
                    : GoogleSpreadSheetHelper.GetSheetUrl(config.spreadsheetID, tableGID, $"{result.Location.DataIndex + 1 + 1}:{result.Location.DataIndex + 1 + 1}"); // +1 is adjust origin(0 or 1), + 1 is Columns Offset
                Application.OpenURL(url);
            };

            ErrorLogScrollView.Add(button);
        }
예제 #8
0
        private void OnEnable()
        {
            var configRepo = new MasterBuilderEditorWindowConfigRepository(Application.dataPath);
            var config     = configRepo.LoadOrInitializeMasterBuilderConfig();

            rootVisualElement.Add(new Label("設定"));
            ClassNameTextField       = new TextField("設定クラス(T extends MasterBuilderConfig)");
            ClassNameTextField.value = config.configClassName;
            rootVisualElement.Add(ClassNameTextField);

            SpreadSheetIDTextField       = new TextField("SpreadSheetID(GoogleApps)");
            SpreadSheetIDTextField.value = config.spreadsheetID;
            rootVisualElement.Add(SpreadSheetIDTextField);
            OpenSheetButton = new Button();
            OpenSheetButton.Add(new Label("シートをブラウザで開く"));
            OpenSheetButton.clicked += () =>
            {
                Application.OpenURL(GoogleSpreadSheetHelper.GetSheetUrl(SpreadSheetIDTextField.value));
            };
            rootVisualElement.Add(OpenSheetButton);


            rootVisualElement.Add(new Label("整合性チェックエラー時もローカルのマスタを上書きする"));
            ForceOverWriteOnValidationErrorToggle = new Toggle()
            {
                value = config.forceOverwriteOnValidationError
            };
            rootVisualElement.Add(ForceOverWriteOnValidationErrorToggle);

            SaveConfigButton          = new Button();
            SaveConfigButton.clicked += () => {
                configRepo.SaveConfig(GetCurrentConfig());
            };
            SaveConfigButton.Add(new Label("設定保存"));
            rootVisualElement.Add(SaveConfigButton);

            rootVisualElement.Add(new Label("通信処理"));
            SyncButton          = new Button();
            SyncButton.clicked += async() =>
            {
                System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();

                var currentConfig = GetCurrentConfig();
                sw.Start();
                var loader = new GoogleSpreadSheetLoader(currentConfig.spreadsheetID, currentConfig.configClassName, Application.dataPath);
                var result = await loader.LoadAll();

                ErrorLogScrollView.Clear();
                var validationResults = DataValidator.ValidateTables(result.DataPool);
                if (validationResults.Count > 0)
                {
                    Debug.LogWarning($"ValidatonError Count: {validationResults.Count}");
                    if (!currentConfig.forceOverwriteOnValidationError)
                    {
                        foreach (var validationResult in validationResults)
                        {
                            Debug.LogError(validationResult.Message);
                            AddErrorLogScrollViewContent(validationResult, currentConfig, result.AvailableSheetDictionary);
                        }
                        sw.Stop();
                        Debug.LogError($"Synchronization Failured. Elapsed: {sw.ElapsedMilliseconds} ms");


                        return;
                    }

                    foreach (var validationResult in validationResults)
                    {
                        Debug.LogWarning(validationResult.Message);
                        AddErrorLogScrollViewContent(validationResult, currentConfig, result.AvailableSheetDictionary);
                    }
                }
                var fsWrapper = new MasterDataFileSystemWrapper(config.configClassName, Application.dataPath);
                fsWrapper.ExportAll(result.DataPool);

                AddAllClearScrollViewContent();

                sw.Stop();
                Debug.Log($"Syncronization done. Elapsed: {sw.ElapsedMilliseconds} ms");
            };
            SyncButton.Add(new Label("マスタ同期"));
            rootVisualElement.Add(SyncButton);

            rootVisualElement.Add(new Label("整合性チェックエラー行へのリンク"));

            ErrorLogScrollView = new ScrollView();

            rootVisualElement.Add(ErrorLogScrollView);
        }