将带有图像的列表导出到 Excel

时间:2021-06-22 18:34:33

标签: c# excel xamarin xamarin.forms export-to-excel

我有一个具有 4 个属性的模型。 ItemNameItemLastNameItemAgeItemImage

我可以将列表导出到 excel (.xlsx) 并且效果很好, 问题是...我无法导出图像。

我想得到的是... 当我将列表导出到 .xlsx 时,我还想复制(或添加或附加我猜)Excel 工作表中的所有图像。

非常感谢。

我知道有很多关于这方面的信息,我尝试了很多都没有运气。 (大部分信息是添加单个图像,而不是包含图像的列表)。

由于我是编码新手,如果您能帮我提供一些代码或示例(如果我可以问,请不要链接),那就太好了。

这是导入方法

IWorkbook workbook;
ISheet sheet;
FileResult file;

private async void Import_Button(object sender, EventArgs e)
{
    try
    {
        file = await FilePicker.PickAsync();
                    
        if (file.FileName.EndsWith(".xlsx"))
        {
            workbook = null;
            FileStream fs = new FileStream(file.FullPath, FileMode.Open, FileAccess.Read);
            if (file.FullPath.IndexOf(".xlsx") > 0)
                workbook = new XSSFWorkbook(fs);

            sheet = workbook.GetSheetAt(0);

            if (sheet != null)
            {
                for (int i = 1; i < sheet.LastRowNum; i++)
                {
                    IRow row = sheet.GetRow(i);
                }
            }
        }
        else
        {
            return;
        }
    }
    catch (Exception) { }
}

这是保存方法

public async Task ExportDataToExcelAsync()
{
    var storageStatus = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Storage);
    if (storageStatus != Plugin.Permissions.Abstractions.PermissionStatus.Granted)
    {
        var results = await CrossPermissions.Current.RequestPermissionsAsync(new[] { Permission.Storage });
        storageStatus = results[Permission.Storage];
    }
            
    try
    {
        var newDir = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/TestFolder/";
        if (!Directory.Exists(newDir))
        {
            Directory.CreateDirectory(newDir);
        }

        string newFileName = DateTime.Now.ToString("Test_" + "yyyyMMdd");
        newFileName = Path.ChangeExtension(newFileName, "xlsx");
        var path = Path.Combine(newDir, newFileName);
                    
        FilePath = path;

        using (SpreadsheetDocument document = SpreadsheetDocument.Create(path, SpreadsheetDocumentType.Workbook))
        {
            WorkbookPart workbookPart = document.AddWorkbookPart();
            workbookPart.Workbook = new Workbook();

            WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
            worksheetPart.Worksheet = new Worksheet();
                        
            Sheets sheets = workbookPart.Workbook.AppendChild(new Sheets());
            Sheet sheet = new Sheet() { Id = workbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "Xamarin list" };
            sheets.Append(sheet);
                        
            workbookPart.Workbook.Save();
                        
            SheetData sheetData = worksheetPart.Worksheet.AppendChild(new SheetData());
                
            Row row = new Row();
                        
            row.Append(
                ConstructCell("Name", CellValues.String),
                ConstructCell("Last Name", CellValues.String),
                ConstructCell("Age", CellValues.String),
                ConstructCell("Item Image", CellValues.String)
                );

            sheetData.AppendChild(row);

            foreach (var d in allItems)
            {
                row = new Row();

                row.Append(
                    ConstructCell(d.ItemName.ToString(), CellValues.String),
                    ConstructCell(d.ItemLastName, CellValues.String),
                    ConstructCell(d.ItemAge, CellValues.String),
                    ConstructCell(d.ItemImage.ToString(), CellValues.String)
                    );

                sheetData.AppendChild(row);
            }

            worksheetPart.Worksheet.Save();
            await Navigation.PopAsync();
        }

    }
    catch (Exception) { }
}

private Cell ConstructCell(string value, CellValues dataType)
{
    return new Cell()
    {
        CellValue = new DocumentFormat.OpenXml.Spreadsheet.CellValue(value),
        DataType = new EnumValue<CellValues>(dataType)
    };
}

public string FilePath { get; set; }

0 个答案:

没有答案