Подтвердить что ты не робот

Openxml spreadsheat save-as

У меня есть таблица Excel 2007, которую я редактирую с помощью OpenXML SDK 2. Я удаляю несколько строк и т.д. Я хотел бы знать, как сохранить этот документ Spreadsheet для другого имени файла.

4b9b3361

Ответ 1

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

byte[] byteArray = File.ReadAllBytes("C:\\temp\\oldName.xltx");
using (MemoryStream stream = new MemoryStream())
{
    stream.Write(byteArray, 0, (int)byteArray.Length);
    using (SpreadsheetDocument spreadsheetDoc = SpreadsheetDocument.Open(stream, true))
    {
       // Do work here
    }
    File.WriteAllBytes("C:\\temp\\newName.xlsx", stream.ToArray()); 
}

Существуют и другие способы изменить имя, например, при возврате файла пользователю в веб-приложении ASP.NET MVC, но это зависит от того, что вы пытаетесь сделать.

Ответ 2

Посмотрите на эту библиотеку ClosedXML, которая основана на OpenXML; он упрощает много операций с документами и предоставляет метод SaveAs. Вот пример того, что вы можете сделать.

        var workbook = new XLWorkbook();
        var worksheet = workbook.Worksheets.Add("Sample Sheet");
        worksheet.Cell("A1").Value = "Hello World!";
        workbook.SaveAs("HelloWorld.xlsx");

Ответ 3

Я настоятельно рекомендую ClosedXML - просто использовал его в первый раз, и изначально я сделал функцию "Импортировать из excel" за несколько часов, используя стандартный SDK Open XML 2.0 - я переписал его менее чем за 15 минут, а также Я сделал экспорт, чтобы преуспеть за 10 минут с помощью этого инструмента.

Ответ 4

Здесь мое решение для сохранения как, проверено со сложной книгой, которая имеет макросы и условное форматирование и т.д. (этот метод находится в оболочке, которая имеет свойство SpreadsheetDocument "Документ" ):

    /// <summary>
    /// Saves as.
    /// </summary>
    /// <param name="fileName">Name of the file.</param>
    public void SaveAs(String filename)
    {
        String dir = filename.Replace(System.IO.Path.GetFileName(filename), String.Empty);
        if (!System.IO.Directory.Exists(dir))
            System.IO.Directory.CreateDirectory(dir);

        SpreadsheetDocument newDoc = SpreadsheetDocument.Create(filename, Document.DocumentType);

        //Make sure it clear
        newDoc.DeleteParts<OpenXmlPart>(newDoc.GetPartsOfType<OpenXmlPart>());

        //Copy all parts into the new book
        foreach (OpenXmlPart part in Document.GetPartsOfType<OpenXmlPart>())
        {
            OpenXmlPart newPart = newDoc.AddPart<OpenXmlPart>(part);
        }

        //Perform 'save as'
        newDoc.WorkbookPart.Workbook.Save();
        newDoc.Close();
        this.Document.Close();

        //Open new doc
        this.Document = SpreadsheetDocument.Open(filename, true);
    }

Ответ 5

Вы можете сохранить этот Spreadsheetdocument в другое имя файла, а затем открыть его для редактирования.

string sourceFile = "C:\Users\***.xlsx";
string destFile = "C:\Users\*****.xlsx";
System.IO.File.Copy(sourceFile, destFile, true);
using (SpreadsheetDocument spreadsheetDoc = SpreadsheetDocument.Open(destFile, true))
{
  //remove some rows etc
  //save workbookpart
}

Ссылки: Как: копировать, удалять и перемещать файлы и папки (Руководство по программированию в С#)