#c# #excel #asp.net-core #.net-core #import-from-excel
#c# #преуспеть #asp.net-ядро #.net-ядро #импорт из excel
Вопрос:
Когда я пытаюсь импортировать в Excel более 33 столбцов, у меня возникает эта ошибка.
An item with the same key has already been added. Key: [0, SEX]
[0, ПОЛ] — мой 34-й столбец
Я конвертирую файл в объект Isheet. Он работает нормально, когда в нем меньше 33 столбцов.
Также он работает над другим проектом. Я использую его точно так же и здесь. Я проверил версии некоторых пакетов, но не смог найти проблему.
Это мой контроллер.
public async Task<IActionResult> YeniUyeAktarimUpload()
{
try
{
IFormFile file = Request.Form.Files[0];
string folderName = "UploadExcel";
string webRootPath = _hostingEnvironment.WebRootPath;
string newPath = Path.Combine(webRootPath, folderName);
Stream stream = file.OpenReadStream();
using (stream)
{
ISheet sheet;
string sFileExtension = Path.GetExtension(file.FileName).ToLower();
if (sFileExtension == ".xls")
{
HSSFWorkbook hssfwb = new HSSFWorkbook(stream); //This will read the Excel 97-2000 formats
sheet = hssfwb.GetSheetAt(0); //get first sheet from workbook
}
else
{
XSSFWorkbook hssfwb = new XSSFWorkbook(stream); //I GET ERROR HERE
sheet = hssfwb.GetSheetAt(0); //get first sheet from workbook
}
}
await _aktarimlarService.YeniUyeAktarim(sheet);
return RedirectToAction("YeniUyeAktarim","Aktarimlar");
}
catch (Exception ex)
{
_logger.LogError(ex.Message);
TempData["ErrorMessage"] = "Duyurular getirilirken hata oluştu. Lütfen daha sonra tekrar deneyiniz. ";
return RedirectToAction("Error", "HomeKurum", new { returnUrl = "/Aktarimlar/YeniUyeAktarim" });
}
}
и это мое мнение
<section class="content">
<div class="card card-primary card-outline">
<div class="card-header">
<h2 class="card-title">Yeni Üye Aktarım</h2>
</div>
<!-- /.card-header -->
<div class="card-body">
<form asp-controller="Home" asp-action="Export">
<div class="container">
<div class="row">
<div class="col-md-4">
<input type="file" id="fileupload" name="files" class="form-control" />
</div>
<div class="col-md-3">
<input type="button" name="Upload" value="Upload" id="btnupload" class="btn btn-primary" />
<a href="@Url.Action("Download", "Home")">Download</a>
</div>
<div class="col-md-5">
<input type="submit" name="Export" value="Create and Export" id="btnExport" class="btn btn-primary" asp-action="Export" />
</div>
</div>
<div class="clearfix">amp;nbsp;</div>
<div class="row">
<div id="divPrint"></div>
</div>
</div>
</form>
<a class="text-danger" href="~/Downloads/AKTARIM_TASLAK/YeniUyeAktarim.xlsx">Taslak indir</a>
<a href="~/Downloads/AKTARIM_TASLAK/YeniUyeAktarim.xlsx"><img width="50" height="40" src="~/images/excel-indir.png" /></a>
@if (TempData.ContainsKey("ErrorMessage"))
{
<div class="alert alert-danger alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">amp;times;</span></button>
@TempData["ErrorMessage"]
</div>
}
</div>
</div>
И это мой код jquery
<script type="text/javascript">$(function () {
$('#btnupload').on('click', function () {
var fileExtension = ['xls', 'xlsx'];
var filename = $('#fileupload').val();
if (filename.length == 0) {
alert("Please select a file.");
return false;
}
else {
var extension = filename.replace(/^.*./, '');
if ($.inArray(extension, fileExtension) == -1) {
alert("Please select only excel files.");
return false;
}
}
var fdata = new FormData();
var fileUpload = $("#fileupload").get(0);
var files = fileUpload.files;
fdata.append(files[0].name, files[0]);
$.ajax({
type: "POST",
url: "/Aktarimlar/YeniUyeAktarimUpload",
beforeSend: function (xhr) {
xhr.setRequestHeader("XSRF-TOKEN",
$('input:hidden[name="__RequestVerificationToken"]').val());
},
data: fdata,
contentType: false,
processData: false,
success: function (response) {
if (response.length == 0)
alert('Some error occured while uploading');
else {
$('#divPrint').html(response);
}
},
error: function (e) {
$('#divPrint').html(e.responseText);
}
});
})
$('#btnExport').on('click', function () {
var fileExtension = ['xls', 'xlsx'];
var filename = $('#fileupload').val();
if (filename.length == 0) {
alert("Please select a file then Import");
return false;
}
});
});</script>
Спасибо за вашу помощь..
Комментарии:
1. У вас есть первичный ключ в базе данных, который допускает только одну строку для каждого ключа. Вы добавляете дубликаты, поэтому вам может потребоваться выполнить обновление вместо вставки.
2. @jdweng Ну, я ничего не делаю с базой данных. Я просто загружаю лист Excel и пытаюсь работать с ним.
3. Таблица Excel на самом деле является базой данных. Открывается ли рабочая книга, если вы открываете ее вручную с помощью Excel? Есть ли у вас какие-либо макросы в Excel? Каково расширение файла? Я думаю, у вас есть два столбца с одинаковым именем (данные в первой строке), которые выдают ошибку.