/// <summary> /// Saves the <paramref name="data"/> byte array to the <paramref name="outputFile"/> /// </summary> /// <param name="data">The stream as byte array</param> /// <param name="outputFile">The output filename with path</param> /// <returns></returns> /// <exception cref="OEFileIsCorrupt">Raised when the file is corrupt</exception> internal static string SaveByteArrayToFile(byte[] data, string outputFile) { // Because the data is stored in a stream we have no name for it so we // have to check the magic bytes to see with what kind of file we are dealing var extension = Path.GetExtension(outputFile); if (string.IsNullOrEmpty(extension)) { var fileType = FileTypeSelector.GetFileTypeFileInfo(data); if (fileType != null && !string.IsNullOrEmpty(fileType.Extension)) outputFile += "." + fileType.Extension; if (fileType != null) extension = "." + fileType.Extension; } // Check if the output file already exists and if so make a new one outputFile = FileManager.FileExistsMakeNew(outputFile); if (extension != null) { switch (extension.ToUpperInvariant()) { case ".XLS": case ".XLT": case ".XLW": using (var memoryStream = new MemoryStream(data)) using (var compoundFile = new CompoundFile(memoryStream)) { Excel.SetWorkbookVisibility(compoundFile.RootStorage); compoundFile.Save(outputFile); } break; case ".XLSB": case ".XLSM": case ".XLSX": case ".XLTM": case ".XLTX": using (var memoryStream = new MemoryStream(data)) { var file = Excel.SetWorkbookVisibility(memoryStream); File.WriteAllBytes(outputFile, file.ToArray()); } break; default: File.WriteAllBytes(outputFile, data); break; } } else File.WriteAllBytes(outputFile, data); return outputFile; }
/// <summary> /// This will save the complete tree from the given <paramref name="storage"/> to a new <see cref="CompoundFile"/> /// </summary> /// <param name="storage"></param> /// <param name="fileName">The filename with path for the new compound file</param> internal static string SaveStorageTreeToCompoundFile(CFStorage storage, string fileName) { fileName = FileManager.FileExistsMakeNew(fileName); using (var compoundFile = new CompoundFile()) { GetStorageChain(compoundFile.RootStorage, storage); compoundFile.Save(fileName); } return fileName; }