Сообщение об ошибке при попытке сохранить созданный файл Excel в c # - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь создать файл Excel в C # с Interop. Я создал базовое форматирование и собирался извлечь данные из базы данных SQL, но сначала хотел убедиться, что он работает нормально.

Каждый раз, когда я пытаюсь сохранить файл, я получаю общее

Исключение из HRESULT: 0x800A03EC

сообщение. Я искал решение повсюду и пытался сделать все, что мог, но я не могу заставить его работать. При достижении строки SaveAs выдается сообщение об ошибке.

Ниже приведен мой код для функции void, которая создает файл Excel:

public static void createFile()
{
    //Figures out how many days are in the month
    string month = File.ReadAllText(@"C:\Users\noahc\Documents\TimesheetInvoiceMonth\month.txt", Encoding.UTF8);
    string year = DateTime.Now.Year.ToString();
    int intYear = Convert.ToInt32(year);
    int columns;

    if (month == "September" || month == "April" || month == "June" || month == "November")
    {
        columns = 34;
    }
    else if (month == "January" || month == "March" || month == "May" || month == "July" || month == "August"
        || month == "October" || month == "December")
    {
        columns = 35;
    }
    else if (DateTime.IsLeapYear(intYear))
        columns = 33;
    else
        columns = 32;

    //Create excel application
    Excel._Application xlApp = new Excel.Application();
    Excel.Workbooks xlWorkbooks = xlApp.Workbooks;
    Excel.Workbook xlWorkbook = xlWorkbooks.Add(Type.Missing);
    Excel.Worksheet xlSheet = xlWorkbook.ActiveSheet;
    xlApp.Visible = true;

    xlApp.StandardFont = "Arial Narrow";
    xlApp.StandardFontSize = 10;

    //Format top row
    xlSheet.Cells[1, "A"] = "monthly time sheet | lee calisti";
    xlSheet.Cells[1, "A"].Font.Size = 14;
    xlSheet.Cells[1, "A"].Font.Color = Color.White;

    //colNames is an array of column names
    string[] colNames = new string[columns];

    //Entering column names into array
    colNames[0] = month + " " + year;
    colNames[2] = "date";

    for (int i = 3; i < columns - 1; i++)
    {
        colNames[i] = (i - 2).ToString();
        xlSheet.Columns[i + 1].ColumnWidth = 4.25;
    }

    colNames[columns - 1] = "Project";
    string lastColumn;
    switch (columns)
    {
        case 32:
            lastColumn = "AF";
            break;
        case 33:
            lastColumn = "AG";
            break;
        case 34:
            lastColumn = "AH";
            break;
        case 35:
            lastColumn = "AI";
            break;
        default:
            lastColumn = "A";
            MessageBox.Show("Something is wrong...");
            break;
    }
    //Back color of first row
    xlSheet.get_Range("A1", lastColumn + "1").Interior.Color = Color.FromArgb(197, 90, 17);

    //Date on last column of first row
    DateTime thisDay = DateTime.Today;
    xlSheet.Cells[1, lastColumn] = thisDay.ToString("d");
    xlSheet.Cells[1, lastColumn].Font.Color = Color.White;

    //Second row
    xlSheet.get_Range("A2", lastColumn + "2").Value2 = colNames;
    xlSheet.get_Range("A2", "C2").Font.Bold = true;
    xlSheet.get_Range("B2", lastColumn + "2").HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
    xlSheet.Columns[1].AutoFit();

    //Third row
    xlSheet.Cells[3, lastColumn] = "Total Hours";

    //Project name, phase, and number headings
    xlSheet.Cells[4, "C"] = "project";
    xlSheet.Cells[4, "C"].Font.Bold = true;
    xlSheet.Cells[5, "A"] = "project name";
    xlSheet.Cells[5, "B"] = "phase";
    xlSheet.Cells[5, "C"] = "number";
    xlSheet.get_Range("A5", "C5").Font.Bold = true;
    xlSheet.get_Range("B4", "C5").HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
    xlSheet.Columns[columns].AutoFit();

    // Save the excel file at specified location
    xlWorkbook.SaveAs(@"C:\Users\noahc\OneDrive\Documents\NOAH\TestSave\test.xlsx");

    //Cleanup
    xlWorkbook.Close(true);
    xlApp.Quit();
    GC.Collect();
    GC.WaitForPendingFinalizers();
    Marshal.FinalReleaseComObject(xlApp);
    Marshal.FinalReleaseComObject(xlWorkbooks);
    Marshal.FinalReleaseComObject(xlWorkbook);
    Marshal.FinalReleaseComObject(xlSheet);
}

1 Ответ

0 голосов
/ 02 октября 2019

В моем случае у меня проблемы со шрифтом "Arial Narrow". Это не только вызвало проблемы с сохранением файла, но и привело к тому, что я не смог открыть любые файлы Excel (поскольку при запуске этого сценария изменялся шрифт по умолчанию для Excel, а не только шрифт для этой книги)!

Это может вызвать особенно трудные проблемы с отладкой, потому что вы не можете просто закомментировать строки и повторить попытку, так как вы фактически изменили состояние установленного приложения Excel.

В итоге мне удалось зайти в настройки Excel и изменить шрифт по умолчанию обратно на Arial. Затем, как предложено, закомментируйте как можно больше строк, работая в обратном направлении, пока вы не изолируете проблему.

Опять же, я должен добавить, что при изменении свойств в xlApp вы создаете побочные эффекты на уровне приложения. Убедитесь, что вы восстановили настройки по умолчанию, затем продолжите отладку скрипта.

...