Tengo una hoja de cálculo de Excel 2007 que edito con OpenXML SDK 2. Elimino algunas filas, etc. Me gustaría saber cómo guardar ese Spreadsheetdocument en otro nombre de archivo.openxml spreadsheat save-as
Respuesta
Que yo sepa, no existe una forma de cambiar el nombre del archivo, pero dado que una forma de editar el archivo es utilizar secuencias, puede dar fácilmente el nombre del archivo que desea cuando escribe los contenidos de una secuencia:
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());
}
Hay otras maneras de cambiar el nombre, así como al devolver el archivo a un usuario en una aplicación web ASP.NET MVC, pero depende de lo que está tratando de hacer.
Tenga una mirada en esta biblioteca ClosedXML que se basa en OpenXML; simplifica muchas operaciones de documentos y le proporciona el método SaveAs. Aquí hay un ejemplo de lo que puede hacer.
var workbook = new XLWorkbook();
var worksheet = workbook.Worksheets.Add("Sample Sheet");
worksheet.Cell("A1").Value = "Hello World!";
workbook.SaveAs("HelloWorld.xlsx");
Quería seguir usando OpenXML, pero probé ClosedXML después de 2 horas de intentar descubrir cómo abrir una plantilla de Excel existente, completar información y llevarla al navegador. Lo hice solo en 3 minutos con ClosedXML. Fue extremadamente fácil, tengo que decirlo. – Quan
Recomiendo ClosedXML - sólo lo utilizó por primera vez y en un principio que he hecho una funcionalidad "Importar desde Excel" en pocas horas usando Open XML estándar 2.0 SDK - He reescritura que en menos de 15 minutos y también he hecho la exportación para sobresalir en 10 minutos usando esta herramienta.
aquí está mi solución para un guardar como, probado con libro complicado que tiene macros y el formato condicional, etc. (este método es en una envoltura que tiene una propiedad SpreadsheetDocument "Documento"):
/// <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);
}
- 1. ¿ExecCommand SaveAs funciona en Firefox?
- 2. tablas anidadas de OpenXML
- 3. Múltiples hojas de OpenXML
- 4. Comenzar OpenXml y PowerPoint
- 5. Generando PDF desde OpenXml
- 6. Windows 7 .net Excel .SaveAs() Error Excepción de HRESULT: 0x800A03EC
- 7. .NET Problemas de rendimiento OpenXML
- 8. Bibliotecas OpenXML (alternativas a ClosedXML)
- 9. C# openxml eliminación del párrafo
- 10. Creando documentos OpenXML usando JavaScript
- 11. Prueba automatizada SDK de OpenXML
- 12. Dónde puedo encontrar buena documentación en OpenXML
- 13. Word/OpenXML - ¿Cómo creo un marcador oculto?
- 14. Agregue dinámicamente la imagen a powerpoint openxml
- 15. C# filas de recuento EPPlus OpenXML
- 16. Obtener un CheckBox en Word usando OpenXML
- 17. openxml - insertar una fila, mover otros
- 18. Crear salto de página usando OpenXml
- 19. Descarga de archivo OpenXML sin archivo temporal
- 20. OpenXml: Convierta un XElement en un OpenXmlElement
- 21. Uso de TDD con OpenXML-SDK
- 22. Creando documento Excel con OpenXML sdk 2.0
- 23. Rangos con nombre en Excel OpenXML
- 24. ¿Subversión eficientemente documentos de Office OpenXML?
- 25. documento Duplicación Word utilizando OpenXml y C#
- 26. Reemplazo de controles de contenido en OpenXML
- 27. SaveAs vs SaveAs2 en el modelo de objeto de Microsoft Office Word
- 28. Insertar HTML en documento de Word OpenXML (.Net)
- 29. Insertar nuevas filas y mover existentes con OpenXML SDK 2.0
- 30. Justificación en el texto de tableCell con OpenXML SDK 2.0
Este código no parece estar bien. ¿Necesita 'stream.Seek (0, SeekOrigin.Begin)' antes de pasarlo a la llamada 'SpreadsheetDocument.Open'? De lo contrario, la llamada abierta recibirá una transmisión vacía ya que está al final de la transmisión. –
Es de suponer que hay una llamada interna para buscar 0, ya que el código funciona para mí como está. –