C# сохранение файла Excel с указанным c именем файла с использованием `[]` не работает - PullRequest
2 голосов
/ 13 марта 2020

Я пытаюсь сохранить книгу Excel с указанным c путем и именем файла с расширением .xlsx.

Это полная ошибка, когда я нажимаю кнопку, чтобы сохранить:

$ exception {"Не удалось получить доступ к файлу. Попробуйте одно из следующих действий: \ n \ n • Убедитесь, что указанная папка существует. \ N • Убедитесь, что папка, содержащая файл, не читается только. \ n • Убедитесь, что имя файла и путь к папке не содержат ни одного из следующих символов: <>? []: | или * \ n • Убедитесь, что имя файла и путь к папке не содержат более 218 символов. "} System.Runtime.InteropServices.COMException

Я вижу, что это говорит - do not contain any of the following characters: < > ? [ ] : |

Код:

//Path
string result = "C:\\Users\\LV98\\Desktop\\Test C#\\";

//Save Path
public string TheValue
{
    get { return $"{result}{Path.GetFileNameWithoutExtension(f8.filePath)} [{DateTime.Now.ToString("ddMyyyyHHmmss")}].xlsx"; }
}

//Button
private void button1_Click(object sender, EventArgs e)
{
    //Excel Application
    excelApp = new Excel.Application();
    //Excel Workbooks
    workbooks = excelApp.Workbooks;
    //Excel Workbook
    target = workbooks.Add(f8.filePath);
    //Excel all sheets from Workbook
    Excel.Sheets sheets = target.Worksheets;
    //Get specific sheet name
    Excel.Worksheet workingSheet = (Excel.Worksheet)sheets.get_Item(value);

    var newbook = excelApp.Workbooks.Add(1);

    workingSheet.Copy(newbook.Sheets[1]);

    newbook.SaveAs(TheValue); // ----------------------------------------------------- SAVE VALUE HERE
    newbook.Close();

    target.Close();
    excelApp.Quit();
    killExcel();

    this.Close()    
}

Подробности:

У меня явно есть [] в пути к файлу Сохранить как.

Но я могу создать файл вручную и назвать его с помощью [] без проблем. ..

enter image description here

Это вывод TheValue:

enter image description here

Обеспокоенность:

Почему это не позволяет мне использовать []?

1 Ответ

1 голос
/ 14 марта 2020

Это общее ограничение Excel, которое не относится конкретно к COM, вы получите точно такое же сообщение, если попытаетесь сохранить файл из Excel, который содержит квадратные скобки в имени. Я предполагаю, что причина в том, что в Excel вы можете ссылаться на другой файл рабочей книги в формуле, используя что-то вроде этого:

='E:\Temp\[Test.xlsx]Sheet1'!$A$1

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

public string TheValue
{
   get { return $"{result}{Path.GetFileNameWithoutExtension(f8.filePath)} ({DateTime.Now.ToString("ddMyyyyHHmmss")}).xlsx"; }
}
File.Move(TheValue, TheValue.Replace("(","[").Replace(")","]"));

Это при условии, что нет никакой возможности, чтобы имя файла уже содержало круглые скобки, если это возможно, вы можете просто сначала сохранить его в уникальное имя файла в Excel, а затем использовать существующий TheValue в качестве конечной цели для File.Move.

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