У меня есть следующая C# функции в моем проекте, который должен открыть и вернуть существующие книги Excel объект:Невозможно открыть Excel файла в C#
Application _excelApp;
// ...
private Workbook OpenXL(string path, string filename)
{
try
{
if (_excelApp == null)
{
_excelApp = new Application();
}
Workbook workBook = _excelApp.Workbooks.Open(path + filename, // Name
0, // Do not update links
true); // Open read-only
return workBook;
}
catch (Exception e)
{
_excelApp = null;
throw new ArgumentException("Error opening " + path + filename, e);
}
}
Но когда я запускаю его с «C: \» и «scratch.xlsx», вызов Open() выдает следующее сообщение об ошибке:
Microsoft Excel cannot access the file 'C:\scratch.xlsx'. There are several possible reasons:
• The file name or path does not exist.
• The file is being used by another program.
• The workbook you are trying to save has the same name as a currently open workbook.
файл и путь действительно существует: Я скопировал путь от сообщения об ошибке и вставить его в окно командной строки и файл загружается в Excel. Файл не заблокирован: Excel может открыть его в порядке, но моя программа не может, даже сразу после перезагрузки. Я не пытаюсь его сохранить, я пытаюсь открыть его, поэтому последний вариант не имеет значения.
Я затрудняюсь понять, почему этот простой кусок кода не работает. Любые предложения были бы чрезвычайно оценены.
[edit] Я теперь попытался открыть этот файл с моего личного сетевого диска (M :) и с USB-накопителя. Все безрезультатно.
Приложение на самом деле является службой Windows, работающей под учетной записью локальной системы и создающей отчеты. В настоящее время он пишет отчеты CSV без каких-либо проблем с доступом. Теперь я пытаюсь открыть файл excel в качестве отчета о шаблоне и заполнить различные поля. Это когда открывается файл Excel, который он терпит неудачу. Я думаю, что опция учетной записи администратора, которую все предлагают, - это красная селедка, так как она может писать файлы CSV без проблем. [/ edit]
--- Alistair.
Попробуйте управлять им? Имеет ли учетная запись пользователя разрешение на чтение файла? –
Вы или C# избегаете '\'? – Kami
Никогда не присоединяйтесь к путям типа 'path + filename'; используйте 'Path.Combine (путь, имя_файла)' вместо! – Marco