Элемент с тем же ключом уже добавлен. Ключ: [0, ПОЛ]

#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? Каково расширение файла? Я думаю, у вас есть два столбца с одинаковым именем (данные в первой строке), которые выдают ошибку.