OpenXML SpareSheat Сохранить как - PullRequest
15 голосов
/ 05 марта 2011

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

Ответы [ 5 ]

14 голосов
/ 07 марта 2011

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

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, но это зависит от того, что вы пытаетесь сделать.

9 голосов
/ 29 сентября 2011

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

        var workbook = new XLWorkbook();
        var worksheet = workbook.Worksheets.Add("Sample Sheet");
        worksheet.Cell("A1").Value = "Hello World!";
        workbook.SaveAs("HelloWorld.xlsx");
4 голосов
/ 24 января 2012

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

2 голосов
/ 18 января 2019

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

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
}

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

1 голос
/ 16 июля 2013

Вот мое решение для сохранения как, протестированного со сложной книгой, которая имеет макросы и условное форматирование и т. Д. (Этот метод находится в оболочке со свойством 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's 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);
    }
...