我有一个具有 4 个属性的模型。
ItemName
、ItemLastName
、ItemAge
、ItemImage
。
我可以将列表导出到 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; }