public static ComObject getRange(string cell, string cell2, ComObject worksheet)
 {
     try
     {
         if (cell2 == "")
             return worksheet.InvokeObjectReturningFunction("get_Range", new object[] { cell, n });
         else
             return worksheet.InvokeObjectReturningFunction("get_Range", new object[] { cell, cell2 });
     }
     catch
     {
         if (cell2 == "")
             return worksheet.GetObjectReturningProperty("Range", new object[] { cell, n });
         else
             return worksheet.GetObjectReturningProperty("Range", new object[] { cell, cell2 });
     }
 }
Beispiel #2
0
        private void writeDataInExcelSheet(string oldExcelFilePath, string newExcelFilePath, List<EntryWithFields> listEntries)
        {
            try
            {
                myWordApp = new ComObject("Excel.Application");
            }
            catch
            {
                MessageBox.Show(CnfLocalSettings.Instance.GetString("noOfficeInstalled"));
                this.Close();
            }

            backgroundWorker1.ReportProgress(75);

            string pdfPath = "";

            try
            {
                myWordApp.SetProperty("Visible", false);
                ComObject obj = myWordApp.GetObjectReturningProperty("Workbooks");
                ComObject workbook = obj.InvokeObjectReturningFunction("Open", oldExcelFilePath);
                ComObject objN = myWordApp.GetObjectReturningProperty("ActiveWorkbook");
                ComObject worksheet = objN.GetObjectReturningProperty("ActiveSheet");

                List<string> left = new List<string>();
                List<string> came = new List<string>();
                int rowNr = 7;

                if (oldExcelFilePath.EndsWith("Muster.xlsx"))
                {
                    listEntries.Sort();

                    object[,] values = new object[listEntries.Count, 22];
                    int maxNr = listEntries.Count + rowNr - 1;
                    string maxNrString = maxNr.ToString();
                    for (int i = 0, j = listEntries.Count; i < j; i++)
                    {
                        if (i != 0)
                            ExcelViaComWrapper.insertRow("B7", worksheet);
                        values[i, 0] = "'" + listEntries[i].Name;
                        values[i, 1] = Int32.Parse(listEntries[i].OldS);
                        values[i, 2] = "=RANG(C" + rowNr + ";C$6:C$" + maxNrString + ";0)";
                        values[i, 3] = listEntries[i].Points;
                        values[i, 4] = "=(G" + rowNr + "-D" + rowNr + ")*(-1)";
                        values[i, 5] = "=RANG(E" + rowNr + ";E$6:E$" + maxNrString + ";0)";
                        values[i, 6] = "=RUNDEN((E" + rowNr + "-C" + rowNr + ")/C" + rowNr + "*100; 2)";
                        values[i, 7] = "=RANG(H" + rowNr + ";H$6:H$" + maxNrString + ";0)";
                        values[i, 8] = "=E" + rowNr + "-C" + rowNr;
                        values[i, 9] = "=RANG(J" + rowNr + ";J$6:J$" + maxNrString + ";0)";
                        values[i, 10] = listEntries[i].OldBdE;
                        values[i, 11] = "=RANG(L" + rowNr + ";L$6:L$" + maxNrString + ";0)";
                        values[i, 12] = listEntries[i].VBases;
                        values[i, 13] = "=(P" + rowNr + "-M" + rowNr + ")*(-1)";
                        values[i, 14] = "=RANG(N" + rowNr + ";N$6:N$" + maxNrString + ";0)";
                        values[i, 15] = "=WENN(N" + rowNr + "=0;0;RUNDEN((N" + rowNr + "-L" + rowNr + ")/L" + rowNr + "*100; 2))";
                        values[i, 16] = "=RANG(Q" + rowNr + ";Q$6:Q$" + maxNrString + ";0)";
                        values[i, 17] = "=N" + rowNr + "-L" + rowNr;
                        values[i, 18] = "=RANG(S" + rowNr + ";S$6:S$" + maxNrString + ";0)";
                        values[i, 19] = "";
                        values[i, 20] = "=RANG(W" + rowNr + ";W$6:W$" + maxNrString + ";0)";
                        values[i, 21] = "=((E" + rowNr + "-$X$4)/$X$5+(H" + rowNr + "-$Y$4)/$Y$5*4+(S" + rowNr + "-$Z$4)/$Z$5*4)/9";
                        rowNr++;
                    }
                    if (CnfLocalSettings.Instance.Language == "1")
                    {
                        ExcelViaComWrapper.setArrayToRangeValue2("C2", "J2", new object[1, 1] { { CnfLocalSettings.Instance.GetString("score") } }, worksheet);
                        ExcelViaComWrapper.setArrayToRangeValue2("L2", "S2", new object[1, 1] { { CnfLocalSettings.Instance.GetString("dfb") } }, worksheet);
                        ExcelViaComWrapper.setArrayToRangeValue2("C3", "J3", new object[1, 1] { { CnfLocalSettings.Instance.GetString("before") } }, worksheet);
                        ExcelViaComWrapper.setArrayToRangeValue2("L3", "L3", new object[1, 1] { { CnfLocalSettings.Instance.GetString("before") } }, worksheet);
                        ExcelViaComWrapper.setArrayToRangeValue2("E3", "F3", new object[1, 1] { { CnfLocalSettings.Instance.GetString("now") } }, worksheet);
                        ExcelViaComWrapper.setArrayToRangeValue2("N3", "P3", new object[1, 1] { { CnfLocalSettings.Instance.GetString("now") } }, worksheet);
                        ExcelViaComWrapper.setArrayToRangeValue2("P5", "P5", new object[1, 1] { { CnfLocalSettings.Instance.GetString("now") } }, worksheet);
                        ExcelViaComWrapper.setArrayToRangeValue2("G5", "G5", new object[1, 1] { { CnfLocalSettings.Instance.GetString("now") } }, worksheet);
                        ExcelViaComWrapper.setArrayToRangeValue2("H3", "J3", new object[1, 1] { { CnfLocalSettings.Instance.GetString("inc") } }, worksheet);
                        ExcelViaComWrapper.setArrayToRangeValue2("Q3", "S3", new object[1, 1] { { CnfLocalSettings.Instance.GetString("inc") } }, worksheet);
                        ExcelViaComWrapper.setArrayToRangeValue2("C4", "C5", new object[1, 1] { { CnfLocalSettings.Instance.GetString("value") } }, worksheet);
                        ExcelViaComWrapper.setArrayToRangeValue2("E4", "E5", new object[1, 1] { { CnfLocalSettings.Instance.GetString("value") } }, worksheet);
                        ExcelViaComWrapper.setArrayToRangeValue2("L4", "L5", new object[1, 1] { { CnfLocalSettings.Instance.GetString("value") } }, worksheet);
                        ExcelViaComWrapper.setArrayToRangeValue2("N4", "N5", new object[1, 1] { { CnfLocalSettings.Instance.GetString("value") } }, worksheet);
                        ExcelViaComWrapper.setArrayToRangeValue2("F4", "G4", new object[1, 1] { { CnfLocalSettings.Instance.GetString("pos") } }, worksheet);
                        ExcelViaComWrapper.setArrayToRangeValue2("O4", "P4", new object[1, 1] { { CnfLocalSettings.Instance.GetString("pos") } }, worksheet);
                        ExcelViaComWrapper.setArrayToRangeValue2("V4", "V5", new object[1, 1] { { CnfLocalSettings.Instance.GetString("pos") } }, worksheet);
                        ExcelViaComWrapper.setArrayToRangeValue2("V2", "V2", new object[1, 1] { { CnfLocalSettings.Instance.GetString("sum") } }, worksheet);
                        ExcelViaComWrapper.setArrayToRangeValue2("V3", "V3", new object[1, 1] { { CnfLocalSettings.Instance.GetString("weighted") } }, worksheet);
                    }
                    string sumColNrString = (maxNr + 1).ToString();
                    ExcelViaComWrapper.setArrayToRangeValue2("P" + sumColNrString, "Q" + sumColNrString, new object[1, 1] { { CnfLocalSettings.Instance.GetString("sum") } }, worksheet);
                    ExcelViaComWrapper.setArrayToRangeValue2("G" + sumColNrString, "H" + sumColNrString, new object[1, 1] { { CnfLocalSettings.Instance.GetString("sum") } }, worksheet);
                    ExcelViaComWrapper.setStringToValue2("J" + sumColNrString, "=SUMME(J6:J" + maxNr + ")", worksheet);
                    ExcelViaComWrapper.setStringToValue2("S" + sumColNrString, "=SUMME(S6:S" + maxNr + ")", worksheet);
                    ExcelViaComWrapper.setStringToValue2("X4", "=MIN(E6:E" + maxNr, worksheet);
                    ExcelViaComWrapper.setStringToValue2("X5", "=(MAX(E6:E" + maxNr + ")-MIN(E6:E" + maxNr + "))/100", worksheet);
                    ExcelViaComWrapper.setStringToValue2("Y4", "=MIN(H6:H" + maxNr, worksheet);
                    ExcelViaComWrapper.setStringToValue2("Y5", "=(MAX(H6:H" + maxNr + ")-MIN(H6:H" + maxNr + "))/100", worksheet);
                    ExcelViaComWrapper.setStringToValue2("Z4", "=MIN(S6:S" + maxNr, worksheet);
                    ExcelViaComWrapper.setStringToValue2("Z5", "=(MAX(S6:S" + maxNr + ")-MIN(S6:S" + maxNr + "))/100", worksheet);
                    ExcelViaComWrapper.setArrayToRangeValue2("B7", "W" + (rowNr - 1).ToString(), values, worksheet);
                    ExcelViaComWrapper.deleteRow("B6", worksheet);
                }

                ExcelViaComWrapper.setStringToValue2("B" + (rowNr + 1).ToString(), CnfLocalSettings.Instance.GetString("gone"), worksheet);
                ExcelViaComWrapper.setStringToValue2("C" + (rowNr + 1).ToString(), CnfLocalSettings.Instance.GetString("new"), worksheet);
                ComObject r = ExcelViaComWrapper.getRange("B" + (rowNr + 2), "", worksheet);
                ComObject font = r.GetObjectReturningProperty("Font");
                font.SetProperty("Bold", true);
                ComObject r2 = ExcelViaComWrapper.getRange("C" + (rowNr + 2), "", worksheet);
                ComObject font2 = r2.GetObjectReturningProperty("Font");
                font2.SetProperty("Bold", true);

                backgroundWorker1.ReportProgress(98);

                pdfPath = newExcelFilePath.Substring(0, newExcelFilePath.Length - 4) + "pdf";
                // DBase-Datei schließen (nicht speichern) und Excel-Datei sichtbar machen
                try
                {
                    FileInfo fi = new FileInfo(newExcelFilePath);
                    if (fi.Exists == true)
                        fi.Delete();
                    workbook.InvokeFunction("SaveAs", new object[] { newExcelFilePath, n, n, n, n, n, 3, n, n, n, n, n });
                    workbook.InvokeFunction("ExportAsFixedFormat", new object[] { 0, pdfPath, n, n, n, n, n, n, n });
                    MessageBox.Show(CnfLocalSettings.Instance.GetString("createdSuccessful"));
                }
                catch (Exception ex)
                {
                    MessageBox.Show(CnfLocalSettings.Instance.GetString("errorSaveFile") + ex.Message);
                }
                backgroundWorker1.ReportProgress(100);

                workbook.InvokeFunction("Close", new object[] { false, n, n });
                try
                {
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
                }
                catch
                {
                }
                GC.Collect();
            }
            catch (Exception ex)
            {
                MessageBox.Show(CnfLocalSettings.Instance.GetString("unknown") + ex.Message);
            }
            killExcelInstanceById(ref myWordApp);
            GC.Collect();
            if (checkBoxShowPDF.Checked)
                System.Diagnostics.Process.Start(pdfPath);
        }