Добавить файл .mpp в список <> - PullRequest
0 голосов
/ 04 февраля 2020

Я работаю с файлами .mpp ... первое, что я делаю, это читаю файл с расширением .mpp, и это хорошо для меня, теперь я пытаюсь добавить этот файл в список, но Я не могу получить это.

Я что-то новое в этом

private void Btn_Actualizar_Click(object sender, EventArgs e)
    {
        OpenFileDialog theDialog = new OpenFileDialog();
        if (theDialog.ShowDialog() == DialogResult.OK)
        {
            string fileName = theDialog.FileName.ToString();
            Load(fileName);
        }
    }

    public new string Load(string fileName)
    {
        MSProject.ApplicationClass app = null;
        string retVal = "";
        List<Task> tasks = new List<Task>();

        try
        {
            // execute the Microsoft Project Application
            app = new MSProject.ApplicationClass();

            // Do not display Microsoft Project
            app.Visible = false;

            // open the project file.
            if (app.FileOpen(fileName, true, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, MSProject.PjPoolOpen.pjPoolReadOnly, Type.Missing, Type.Missing, Type.Missing, Type.Missing))
            {
                // go through all the open projects--there should only be one
                foreach (MSProject.Project proj in app.Projects)
                {
                    // go through all the tasks in the project
                    foreach (MSProject.Task task in proj.Tasks)
                    {
                        // add Microsoft Project Task to arraylist                          
                        //tasks.Add(new Task(task));
                        //tasks.Add(task);
                        List<Task> tasks1 = new List<Task>();

                    }
                }
            }
            else
            {
                retVal = "The MS Project file " + fileName + " could not be opened.";
            }
        }

        catch (Exception ex)
        {
            retVal = "Could not process the MS Project file " + fileName + "." + System.Environment.NewLine + ex.Message + System.Environment.NewLine + ex.StackTrace;
        }

        // close the application if is was opened.
        if (app != null)
        {
            app.Quit(MSProject.PjSaveType.pjDoNotSave);
        }
        return retVal;
    }

Где я хочу добавить результат чтения файла находится в этой части моего кода

foreach (MSProject.Task task in proj.Tasks)
                    {
                        // add Microsoft Project Task to arraylist                          
                        //tasks.Add(new Task(task));
                        //tasks.Add(task);
                        List<Task> tasks1 = new List<Task>();

                    }

Поиск в Интернете уже пробовал несколько вещей, но пока он не работал для меня, и список всегда 0

Ответы [ 2 ]

0 голосов
/ 04 февраля 2020

В соответствии с моими комментариями измените способ объявления списка, а затем раскомментируйте добавление. Теперь вам просто нужно выяснить, что вы на самом деле собираетесь делать со списком.

private void Btn_Actualizar_Click(object sender, EventArgs e)
    {
        OpenFileDialog theDialog = new OpenFileDialog();
        if (theDialog.ShowDialog() == DialogResult.OK)
        {
            string fileName = theDialog.FileName.ToString();
            Load(fileName);
        }
    }

    public new string Load(string fileName)
    {
        MSProject.ApplicationClass app = null;
        string retVal = "";
        List<MSProject.Task> tasks = new List<MSProject.Task>();

        try
        {
            // execute the Microsoft Project Application
            app = new MSProject.ApplicationClass();

            // Do not display Microsoft Project
            app.Visible = false;

            // open the project file.
            if (app.FileOpen(fileName, true, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, MSProject.PjPoolOpen.pjPoolReadOnly, Type.Missing, Type.Missing, Type.Missing, Type.Missing))
            {
                // go through all the open projects--there should only be one
                foreach (MSProject.Project proj in app.Projects)
                {
                    // go through all the tasks in the project
                    foreach (MSProject.Task task in proj.Tasks)
                    {
                        // add Microsoft Project Task to arraylist                          
                        //tasks.Add(new Task(task));
                        tasks.Add(task);
                        //List<Task> tasks1 = new List<Task>();

                    }
                }
            }
            else
            {
                retVal = "The MS Project file " + fileName + " could not be opened.";
            }
        }

        catch (Exception ex)
        {
            retVal = "Could not process the MS Project file " + fileName + "." + System.Environment.NewLine + ex.Message + System.Environment.NewLine + ex.StackTrace;
        }

        // close the application if is was opened.
        if (app != null)
        {
            app.Quit(MSProject.PjSaveType.pjDoNotSave);
        }
        return retVal;
    }
0 голосов
/ 04 февраля 2020

Вы были так близко. К сожалению, в вашем l oop вы продолжали воссоздавать свой список задач, вместо того, чтобы создавать его один раз и добавлять каждый Task к существующему List.

//First, declare your task list outside of any of your event handlers
List<MSProject.Task> tasks = new List<MSProject.Task>();

private void Btn_Actualizar_Click(object sender, EventArgs e)
{
    OpenFileDialog theDialog = new OpenFileDialog();
    // ... and the rest of that code

В вашей функции Load() измените свой код следующим образом. Попробуйте вместо этого:

public new string Load(string fileName)
{
    MSProject.ApplicationClass app = null;
    string retVal = "";
    //if the list object hasn't been created yet, then create it now
    if (tasks == null) 
        tasks = new List<MSProject.Task>();
    else //if it was already created, just clear it.
        tasks.Clear();

    try
    {
        //... (I didn't paste all of the code. It is still required, of course.)

            // go through all the open projects--there should only be one
            foreach (MSProject.Project proj in app.Projects)
            {
                // go through all the tasks in the project
                foreach (MSProject.Task task in proj.Tasks)
                {
                    // add Microsoft Project Task to arraylist                          
                    tasks.Add(task); //<-- this was the correct line, uncommented
                }
        //... (I didn't paste all of the code. It is still required, of course.)

@ Майкл Джонс также дал хороший совет. Имя Task повторно используется несколькими библиотеками. Лучше всего включать пространство имен MSProject, чтобы избежать двусмысленности и связанных с этим ошибок.

...