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

نمونه جدول
public partial class WagePayRowsk
{
[DisplayName("کدپرسنلی")]
public long? EmpID { get; set; }
[DisplayName("کدپرداختی")]
public int CodePayID { get; set; }
[DisplayName("عنوان پرداختی")]
public string CodeDescription { get; set; }
[DisplayName("مبلغ پرداختی")]
public Nullable<long> Val { get; set; }
}
نمونه فایل اکسل

تصویر نمونه اطلاعات ثبت شده در جدول Sql Server
پاسخ هوش مصنوعی
برای تغییر شکل داده ها از فایل اکسل به صورت سطری و عمودی در 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 را برای کار با فایل های اکسل اضافه کنید.
سلام دوست گرامی
برای خواندن اطلاعات از فایل اکسل و ذخیره در دیتابیس که با یه سرچ در گوگل میتونید کدهای زیادی رو برای این کار پیدا کنید :
خواندن اطلاعات از فایل اکسل در سی شارپ
اگر برای نوشتن کدها اشکال دارید بفرمایید تا یک نمونه پیدا کنیم براتون آپلود کنیم.
اما در سوال فرمودید "اطلاعات فایل اکسل بصورت افقی و ستونی می باشد". این قسمت رو متوجه نشدم. شما تصویر یک فایل اکسل قرار دادید که هر ستون حاوی یه سری اطلاعات هست (کد پرسنلی، حق شغل و ...) خب معادل همین ستون ها رو در جدول Sql Server هم باید ایجاد کنید تا بتونید اطلاعات رو دقیقا داخل ستونهای دیتابیس بریزید. منظور از ستون افقی چی هست دقیقا ؟
دوست عزیز بهتره برای اینکه سوالتون برای مخاطب راحت تر قابل درک باشه یه نمونه ساده شده (نه شامل این همه ستون و اطلاعات) ایجاد کنید و یه تصویر هم از خروجی کاری که نیاز دارید قرار بدید تا به راحتی قابل تست و اجرا باشه. الان با این تصاویری که قرار دادید امکان تست چیزی نیست و صرفا باید تیوری پاسخ داد. اما با همین اطلاعات پاسخ زیر رو براتون پیدا کردم امیدوارم به درد شما بخوره :
برای تغییر ترتیب سطرها و ستونها در فایل اکسل در 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 دانلود و نصب کنید.
- نصب پکیج stimilsoft روی core8
- آموزش نصب و راه اندازی دیتابیس PostgreSQL در ویندوز
- PostgreSql چیست ؟ چه کاربردهایی دارد ؟
- دسترسی به پکیج های nuget در زمان قطع نت بین الملل
- نمایش آخرین ردیف دیتاگیرید موقع لود در wpf
- مشکل اینترنت جهانی و عدم دسترسی به cdnjs.cloudflare.com
- مشکل در نصب sql server 2022
- جلوگیری از اد شدن خودکار در گروه و کانال تلگرام
- کم کردن حجم فیلم توسط کد در Asp net core
- چه کسانی استوری تلگرام را می بینند ؟
- مشکل تاریخ شمسی در سی شارپ
- نمایش گزارش stimulsoft روی کلاینت
- تفاوت های سی شارپ 8 با نسخه های قبلی چیه؟
- انتخاب چند سطر دلخواه توسط چک باکس در DataGrid و محاسبه جمع سطرهای انتخاب شده
- نمایش نوتیفکیشن در سی شارپ
- ارسال پارامتر از سی شارپ به استیمول سافت
- عدم نمایش عکس در دیتاگرید ویو در wpf
- Library Animation برای کنترلهای WPF
- مشکل در تغییر مقدار Text کنترل RibbonBar در کامپوننت DevExpress
- قرار دادن مقادیر ارسالی یک ستون از جدول به صورت سطری در استیمول