دسته بندی ها
15:00 1404/03/06

تغییر ستون وسطر در مشاهده اطلاعات فایل اکسل در سی شارپ

مشخصات سوال کننده :
کاربر : Mousavi     امتیاز کاربر : 0     رتبه کاربر : 7348
دسته بندی : سی شارپ

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 467
هوش مصنوعی

پاسخ هوش مصنوعی

برای تغییر شکل داده ها از فایل اکسل به صورت سطری و عمودی در DataGrid در C#، شما می توانید از کلاس های LINQ برای تبدیل داده ها استفاده کنید. در اینجا یک نمونه کد برای انجام این کار ارایه می شود:

using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using OfficeOpenXml;

public class ExcelDataProcessor
{
    public List ReadExcelData(string filePath)
    {
        FileInfo existingFile = new FileInfo(filePath);
        using (ExcelPackage package = new ExcelPackage(existingFile))
        {
            ExcelWorksheet worksheet = package.Workbook.Worksheets[0];
            int rowCount = worksheet.Dimension.Rows;
            int colCount = worksheet.Dimension.Columns;

            List wagePayRows = new List();

            for (int row = 2; row <= rowCount; row++) // Starting from row 2 to skip headers
            {
                WagePayRowsk wagePayRow = new WagePayRowsk
                {
                    EmpID = long.TryParse(worksheet.Cells[row, 1].Text, out long empId) ? empId : (long?)null,
                    CodePayID = int.TryParse(worksheet.Cells[row, 2].Text, out int codePayId) ? codePayId : 0,
                    CodeDescription = worksheet.Cells[row, 3].Text,
                    Val = long.TryParse(worksheet.Cells[row, 4].Text.Replace(",","").Trim(), out long val) ? val : (long?)null
                };
                wagePayRows.Add(wagePayRow);
            }

            return wagePayRows;
        }
    }
}

این کد، داده ها را از فایل اکسل خوانده و آن ها را در یک لیست از نوع WagePayRowsk ذخیره می کند. سپس می توانید این لیست را به DataGrid متصل کنید.

برای نمایش این داده ها در DataGrid می توانید از کد زیر استفاده کنید:

dataGridView.DataSource = wagePayRows; // wagePayRows لیست حاصل از خواندن فایل اکسل است.

به یاد داشته باشید که برای استفاده از این کد باید بسته EPPlus را برای کار با فایل های اکسل اضافه کنید.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : fateme 22:33 1404/03/07

سلام دوست گرامی

برای خواندن اطلاعات از فایل اکسل و ذخیره در دیتابیس که با یه سرچ در گوگل میتونید کدهای زیادی رو برای این کار پیدا کنید :

خواندن اطلاعات از فایل اکسل در سی شارپ

اگر برای نوشتن کدها اشکال دارید بفرمایید تا یک نمونه پیدا کنیم براتون آپلود کنیم.

اما در سوال فرمودید "اطلاعات فایل اکسل بصورت افقی و ستونی می باشد". این قسمت رو متوجه نشدم. شما تصویر یک فایل اکسل قرار دادید که هر ستون حاوی یه سری اطلاعات هست (کد پرسنلی، حق شغل و ...) خب معادل همین ستون ها رو در جدول Sql Server هم باید ایجاد کنید تا بتونید اطلاعات رو دقیقا داخل ستونهای دیتابیس بریزید. منظور از ستون افقی چی هست دقیقا ؟

به این پاسخ امتیاز بدهید    1
امتیاز: 1635 رتبه: 2
1 نظر
Mousavi : سلام واحترام فراوان. مشکل در این هست که می خواهم داده های هر ستون که شامل عنوان(مثلا حق شغل و..) و مبلغ آن بجای اینکه فیلد معادلش در جدول sqlSerer ایجاد کنم ، آنهارا در دو فیلد جدول (val , Description) که در اینصورت کدپرسنلی هم به تعداد رکوردهاش در جدول تکرار خواهد شد(تصویر جدول بالا).متشکرم

امتیاز کاربر : 0   رتبه کاربر : 7348   تاریخ ثبت : 11:36 1404/03/07
پاسخ دهنده : fateme 13:20 1404/03/10

دوست عزیز بهتره برای اینکه سوالتون برای مخاطب راحت تر قابل درک باشه یه نمونه ساده شده (نه شامل این همه ستون و اطلاعات) ایجاد کنید و یه تصویر هم از خروجی کاری که نیاز دارید قرار بدید تا به راحتی قابل تست و اجرا باشه. الان با این تصاویری که قرار دادید امکان تست چیزی نیست و صرفا باید تیوری پاسخ داد. اما با همین اطلاعات پاسخ زیر رو براتون پیدا کردم امیدوارم به درد شما بخوره :

برای تغییر ترتیب سطرها و ستون‌ها در فایل اکسل در C#، می‌تونید از کتابخانه‌هایی مثل EPPlus یا ClosedXML در سی شارپ استفاد کنید. اگر هدفتون جابجایی داده‌ها بین سطرها و ستون‌ها هست، می‌تونید با استفاده از حلقه‌های تو در تو، داده‌ها را از سلول‌های موجود بخونید و در مکان‌های جدید قرار دهید.

اینم نمونه‌ای از کدی که با استفاده از کتابخانه EPPlus این کار را انجام می‌دهد :

using OfficeOpenXml;
using System.IO;

class Program
{
    static void Main()
    {
        // بارگذاری فایل اکسل
        var fileInfo = new FileInfo("input.xlsx");
        using (var package = new ExcelPackage(fileInfo))
        {
            var worksheet = package.Workbook.Worksheets[0];
            int rowCount = worksheet.Dimension.End.Row;
            int colCount = worksheet.Dimension.End.Column;
            // ایجاد یک شیت جدید برای داده های ترانهاده شده
            var newWorksheet = package.Workbook.Worksheets.Add("Transposed");
            // انتقال داده ها
            for (int row = 1; row <= rowCount; row++)
            {
                for (int col = 1; col <= colCount; col++)
                {
                    newWorksheet.Cells[col, row].Value = worksheet.Cells[row, col].Value;
                }
            }
            // ذخیره فایل جدید
            package.SaveAs(new FileInfo("output.xlsx"));
        }
    }
}

ضمنا برای استفاده از این کد باید کتابخانه EPPlus رو از nuget دانلود و نصب کنید.

به این پاسخ امتیاز بدهید    1
امتیاز: 1635 رتبه: 2
1 نظر
Mousavi : سلام واحترام فراوان.ممنون از اهتمام و راهنمایی ، مشکل حل شد.متشکرم

امتیاز کاربر : 0   رتبه کاربر : 7348   تاریخ ثبت : 01:26 1404/03/12
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود