c# - 将带有图像的列表导出到 Excel
问题描述
我有一个具有 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; }
解决方案
推荐阅读
- android - 快速改变位图亮度
- generics - 从 dart 中的静态函数访问类中的类型参数的解决方法
- javascript - 隐藏指定标签
- 通过 JavaScript 函数从我的代码中获取但不工作
- javascript - 如何使用允许您在新选项卡中打开 chrome 设置的选项制作 chrome 扩展?
- amazon-s3 - 如何通过 S3 URI 对数据集和模型进行分类,但保留本地副本?
- firebase - 如何在不附加 storage.rules 和 firestore.rules 文件的情况下在 Firebase 主机上上传网站?
- c++ - 打开句柄响应因 IDE 运行和构建运行而异
- javascript - 用于输入值的 Javascript/Jquery 事件侦听器
- python - 来自 2 列数据框的 Python 递归函数
- javascript - 使用jquery ajax函数接收PHP数据并将其附加到anychart中