如何通过使用计时器触发器在azure函数应用程序中创建Excel文件

问题描述

我在azure函数应用程序中创建了一个方法,该方法从类中获取静态数据并将其存储到excel文件中,而我正在将excel文件存储在存储帐户中。当我运行该方法时,会在存储帐户中创建一个空的Excel文件

  1. 如何在Azure function-app中创建Excel文件

  2. 如何在Excel文件中存储数据

    [FunctionName("Function1")]
    public static void Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer,ILogger log,[Blob("name/empchange.csv",FileAccess.Read,Connection = "AzureWebJobsstorage")] Stream myblob,[Blob("name/TestNewExcel.xlsx",FileAccess.Write,Connection = "AzureWebJobsstorage")] TextWriter outputblob)
    {
        log.Loginformation($"C# Timer trigger function executed at: {DateTime.Now}");
    
        try
        {
            // Read CSV File
            ReadCsvFile(myblob);
            // create Excel File
            CreateExcel(outputblob);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
        }
    }
    

Excel方法

  static void CreateExcel(TextWriter outputblob)
    {
        data clsdata = new data();
        DataTable table = clsdata.Getdata();

        using (SpreadsheetDocument document = SpreadsheetDocument.Create(outputblob.ToString(),SpreadsheetDocumentType.Workbook))
        {
            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 (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 (System.Data.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();
        }
    }

我的Azure函数绑定:

    {
  "bindings": [
    {
      "name": "myblob","type": "blob","path": "name/empchange.csv","direction": "in","connection": "AzureWebJobsstorage"

    },{
      "name": "outputblob","path": "name/ExcelFile.xlsx","direction": "out","connection": "AzureWebJobsstorage"

    }
  ],"disabled": false
}

解决方法

如果要将csv文件转换为excel文件,我们可以使用软件包EPPlus

例如

[FunctionName("Function1")]
        public static async Task Run(
           [TimerTrigger("0 */5 * * * *",RunOnStartup =true)] TimerInfo myTimer,[Blob("input/test.csv",FileAccess.ReadWrite,Connection = "AzureWebJobsStorage")] CloudBlockBlob blob,[Blob("test/TestNewExcel.xlsx",FileAccess.Write,Connection = "AzureWebJobsStorage")] Stream output,ILogger log)
        {
            log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");

            string worksheetsName = "TEST";

            bool firstRowIsHeader = false;
            ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
            var format = new ExcelTextFormat();
            format.Delimiter = ',';
            format.EOL = "\r";
            using (var ms = new MemoryStream()) {
                using (ExcelPackage package = new ExcelPackage(new FileInfo(@"E:\test.xlsx")))
                {

                    string content = await blob.DownloadTextAsync();
                    ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(worksheetsName);
                    worksheet.Cells["A1"].LoadFromText(content,format,OfficeOpenXml.Table.TableStyles.Medium27,firstRowIsHeader);
                    await package.SaveAsAsync(output).ConfigureAwait(false);
                }
                

            }
           
           
        }

enter image description here enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...