sourcecode

openxml 스프레드쉬트 다른 이름으로 저장

copyscript 2023. 7. 18. 21:53
반응형

openxml 스프레드쉬트 다른 이름으로 저장

OpenXML SDK 2로 편집하는 Excel 2007 스프레드시트가 있습니다.행 등을 몇 개 제거합니다.스프레드시트 문서를 다른 파일 이름으로 저장하는 방법을 알고 싶습니다.

내가 알기로는 파일 이름을 변경할 수 있는 내장된 방법은 없지만 파일을 편집하는 한 가지 방법은 스트림을 사용하는 것이기 때문에 스트림 내용을 쓸 때 원하는 파일 이름을 쉽게 지정할 수 있습니다.

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 웹 응용 프로그램에서 사용자에게 파일을 반환하는 경우와 같이 이름을 변경하는 다른 방법도 있지만, 이 방법은 사용자가 무엇을 하려고 하는지에 따라 다릅니다.

라이브러리 ClosedX 보기OpenXML을 기반으로 하는 ML은 많은 문서 작업을 단순화하고 다른 이름으로 저장 방법을 제공합니다.여기 당신이 할 수 있는 일의 예가 있습니다.

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

ClosedXML을 강력하게 추천합니다. 처음에는 처음 사용했고 처음에는 표준 OpenXML 2.0 SDK를 사용하여 "Excel에서 가져오기" 기능을 몇 시간 만에 수행했습니다. 15분도 안 되어 다시 작성했고 이 도구를 사용하여 10분 내에 내보내기도 완료했습니다.

스프레드시트 문서를 다른 파일 이름으로 저장한 후 열어 편집할 수 있습니다.

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# 프로그래밍 가이드)

다음은 매크로와 조건부 서식 등이 있는 복잡한 워크북으로 테스트한 저장 방법입니다(이 방법은 스프레드시트 문서 속성 "Document"가 있는 래퍼에 있습니다).

    /// <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);
    }

이 기능이 어떤 버전으로 도입되었는지는 모르지만, 어디에서 사용하는지는
SpreadsheetDocument의 하위 클래스입니다.OpenXmlPackage.

이 함수는 새 문서를 반환하므로 복사된 문서로 전환하고 변경사항을 적용할 수 있습니다.

void FromTemplate()
{
  using var template = SpreadsheetDocument.Open("Template.xlsx", isEditable: true);
  using var output = (SpreadsheetDocument)template.SaveAs(path);

  //no longer need to keep handle open
  template.Dispose();

  //apply your changes to package
}

언급URL : https://stackoverflow.com/questions/5203150/openxml-spreadsheat-save-as

반응형