Задача :В установленном компьютере Office 2010 мое приложение должно скопировать пустой файл Excel (файл A) в новый файл Excel (файл B) и использовать библиотеку OpenXML (V2.5) для выполнения какого-либо действия, в конечном итоге сохраненного вжесткий диск.После этого я открываю файл B и просто добавляю к нему небольшие битовые данные (например: 1), сохраняю и закрываю его.когда я снова открываю файл B, Excel выдает ошибку: Excel обнаружил нечитаемый контент в «файле B». Вы хотите восстановить содержимое этой книги ... , и я не могу его открыть.Ниже мой код:
static void Main(string[] args)
{
ExportDataSet(@"C:\A.xlsx",@"C:\");
}
public static void Copy(String oldPath, String newPath)
{
FileStream input = null;
FileStream output = null;
try
{
input = new FileStream(oldPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
output = new FileStream(newPath, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
var buffer = new byte[32768];
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, read);
}
}
catch (Exception e)
{
}
finally
{
if (input != null)
{
input.Close();
input.Dispose();
}
if (output != null)
{
output.Close();
output.Dispose();
}
}
}
public static string ExportDataSet(string filePath, string path, int startRow = 10)
{
var pathToSave = path;
if (!Directory.Exists(pathToSave))
Directory.CreateDirectory(pathToSave);
var filename = pathToSave + Guid.NewGuid() + Path.GetExtension(filePath);
Copy(filePath, filename);
var fs = File.Open(filename, FileMode.Open);
{
using (var myWorkbook = SpreadsheetDocument.Open(fs, true))
{
var workbookPart = myWorkbook.WorkbookPart;
var Sheets = myWorkbook.WorkbookPart.Workbook.GetFirstChild<Sheets>().Elements<Sheet>();
var relationshipId = Sheets.First().Id.Value;
var worksheetPart = (WorksheetPart)myWorkbook.WorkbookPart.GetPartById(relationshipId);
var sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>();
workbookPart.Workbook.Save();
//workbookPart.Workbook.CalculationProperties = new CalculationProperties() { FullCalculationOnLoad = true };
}
fs.Close();
fs.Dispose();
return filename;
}
}
Я думаю, что в библиотеке OpenXML что-то не так.Есть ли у вас какие-либо идеи?Пожалуйста, поделитесь со мной, большое спасибо.Примечания:1. компьютер использует Office 2010, чтобы открыть файл Excel2. формат файла - книга Excel (.xlsx)3. если на компьютере установлен офис более поздней версии (2013, 2016), проблема не возникла.