2011-10-03 3 views
1

Я пытаюсь создать файл csv из файла excel с помощью MS Excel Interop в моем приложении C#/Winforms.Получение ошибки при вызове метода SaveAs

Получаем эту ошибку в методе SaveAs в коде ниже.

«Файл не может быть доступен. Попробуйте выполнить одно из следующих действий:

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

Я попытался установить только для чтения, чтобы ложно (...) метод рабочей книги Open в соответствии с: Problem saving excel file after inserting data, но по-прежнему получают ту же ошибку.

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

Пожалуйста, советую.Сообщить о некоторых проблемах с приводом C?

Heres код:

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); 
+1

Походит разрешений папки выпуска – Variant

+0

Привет Давид, спасибо за ваше имя inputs.The файла является: "22010_Sep11TestReport_rtsim36_2011_09_30 .csv». Это имя файла совпадает, если изменить путь к CSV-файлу на какой-то другой путь, например C: \ SomeFolder, тогда я не получу эту ошибку, и файл csv будет сохранен на компьютере. Таким образом, проблема заключается не в самом имени файла хотя сообщение об ошибке похоже на это. – Jimmy

ответ

4

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


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

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

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

+0

Дэвид, пожалуйста, посмотрите мои комментарии на ваш вопрос выше. Спасибо. – Jimmy

+0

Что такое имя файла, включая полный путь? Вы используете относительные пути? –

0

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

1

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

Смежные вопросы