Вы должны преобразовать данные в Excel (вы можете сохранить Excel в памяти) перед загрузкой в хранилище BLOB-объектов, иначе это вызовет некоторые ошибки.
Я использовал пакет nuget DocumentFormat.OpenXml
для преобразования.
Основной метод:
static void Main(string[] args)
{
DataTable dt = new DataTable("table1");
dt.Columns.Add("name",typeof(string));
dt.Columns.Add("city",typeof(string));
dt.Columns.Add("gender",typeof(string));
dt.Rows.Add("jack", "bj", "male");
dt.Rows.Add("jacky", "sh", "male");
dt.Rows.Add("iva", "bj", "female");
dt.Rows.Add("nancy", "wx", "female");
dt.Rows.Add("ali", "sz", "male");
dt.Rows.Add("andy", "sz", "male");
System.IO.MemoryStream stream = new System.IO.MemoryStream();
using (SpreadsheetDocument document = SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook))
{
WriteExcelFile(document, dt);
}
CloudStorageAccount storageAccount = new CloudStorageAccount(new StorageCredentials("account name", "account key"), true);
CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
var cloudBlobContainer = cloudBlobClient.GetContainerReference("test-1");
var blockBlob = cloudBlobContainer.GetBlockBlobReference("data115.xlsx");
stream.Position = 0;
blockBlob.UploadFromStream(stream);
Console.WriteLine("completed.");
Console.ReadLine();
}
Метод преобразования:
private static void WriteExcelFile(SpreadsheetDocument document, DataTable table)
{
WorkbookPart workbookPart = document.AddWorkbookPart();
workbookPart.Workbook = new Workbook();
WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
var sheetData = new SheetData();
worksheetPart.Worksheet = new Worksheet(sheetData);
Sheets sheets = workbookPart.Workbook.AppendChild(new Sheets());
Sheet sheet = new Sheet() { Id = workbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "Sheet1" };
sheets.Append(sheet);
Row headerRow = new Row();
List<String> columns = new List<string>();
foreach (System.Data.DataColumn column in table.Columns)
{
columns.Add(column.ColumnName);
Cell cell = new Cell();
cell.DataType = CellValues.String;
cell.CellValue = new CellValue(column.ColumnName);
headerRow.AppendChild(cell);
}
sheetData.AppendChild(headerRow);
foreach (DataRow dsrow in table.Rows)
{
Row newRow = new Row();
foreach (String col in columns)
{
Cell cell = new Cell();
cell.DataType = CellValues.String;
cell.CellValue = new CellValue(dsrow[col].ToString());
newRow.AppendChild(cell);
}
sheetData.AppendChild(newRow);
}
workbookPart.Workbook.Save();
}
После теста загруженный файл Excel может быть корректно открыт: