Ошибка при вызове метода SaveAs - PullRequest
1 голос
/ 03 октября 2011

Я пытаюсь создать CSV-файл из файла Excel с помощью MS Excel Interop в моем приложении C # / Winforms.

Получаю эту ошибку при использовании метода SaveAs в приведенном ниже коде.

'Файл не доступен. Попробуйте одно из следующего:

• Убедитесь, что указанная папка существует. • Убедитесь, что папка содержит файл не только для чтения. • Убедитесь, что имя файла не содержать ни одного из следующих символов: <>? []: | или же * • Убедитесь, что имя файла / путь не содержит более 218 characters.'z

Я попытался установить для readonly значение false в методе Open (...) Workbook следующим образом: Проблема с сохранением файла Excel после вставки данных , но все равно возникает та же ошибка.

В моем коде путь к файлу csv был: C: \ Если я изменю путь к файлу csv на C: \ SomeFolder или какой-нибудь общий путь UNC, я не получу эту ошибку.

Пожалуйста, сообщите. Могут ли быть проблемы с разрешениями на диске C?

Вот код:

xlApp = new Microsoft.Office.Interop.Excel.Application(); 
xlApp.DisplayAlerts = false;
xlApp.Visible = false; 
wbkSrc = xlApp.Workbooks.Open(m_sSrcFil, 
                        Type.Missing, false, Type.Missing, Type.Missing, 
                        Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
                        Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
                        Type.Missing, Type.Missing);


                wstSrc = (Worksheet)wbkSrc.Worksheets[sSrcSht]; 
                //wstSrc.Activate();

                rngWork = wstSrc.Cells.get_Range("H:H", System.Reflection.Missing.Value); 
                rngWork.NumberFormat = "General";

                dteTmpDate = Convert.ToDateTime(m_sBusDate); 
                sTmpFileName = m_sSrcFil.Substring(0, m_sSrcFil.IndexOf(".")) + "_" + 
                    m_sUserName + "_" + dteTmpDate.ToString("yyyy_MM_dd") + ".Csv";

                wstSrc.SaveAs(sTmpFileName, XlFileFormat.xlCSV, Type.Missing, 
                    Type.Missing, true, Type.Missing, Type.Missing, Type.Missing, 
                    Type.Missing, Type.Missing);

Ответы [ 3 ]

4 голосов
/ 03 октября 2011

Очевидно, sTmpFileName - неверный путь.Сообщение об ошибке говорит вам об этом.Возможно m_sUserName содержит символы, которые не допускаются.Возможно, это имя пользователя в формате DOMAIN\USER.Возможно, имя файла действительно слишком длинное.Или, возможно, что-то еще.Посмотрите на фактическое значение sTmpFileName, и у вас будет объяснение.


Кроме того, ваш код ошибочно использует SubString и IndexOf(".") для получения имени файла безрасширение.Имена файлов могут иметь несколько периодов.Расширение - это просто текст после final period.Подумайте об именах этих файлов и о том, как с ними справится ваш код:

C:\My.Folder.Name\TheFile.xls
C:\MyFolder\TheFile.Name.xls

Вместо этого следует использовать Path.GetFileNameWithoutExtension.

1 голос
/ 24 октября 2014

Excel SaveAs довольно требователен. Такие вещи, как c:\folder\\file.csv (обратите внимание на двойную обратную косую черту) принимаются File.Exists или при открытии книги, но не при сохранении

0 голосов
/ 22 августа 2013

Проверьте свой FilePath, куда вы сохраняете, если он больше, чем 218 символов, тогда вы также получите эту ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...