0 امتیاز

با سلام
من گریدویو را به فایل اکسل اکسپرت کردم ولی دو ستون شماره ملی و موبایل دارم که این ستون ها هنگام انتقال به اکسل، فرمت ستونش general است و صفرهای قبل از شماره از بین می رود.


1- میخواستم ببینم میشه از کد سی شارپ نوع ستون اکسل رو تعیین کنیم و مثلا text بگذاریم؟

2- می خوام اولین ستون(ستون 0) هم به خروجی ارسال نشود، چطور باید کد رو ویرایش کنم؟

 

کد خروجی من اینه:

            try
            {
                Frm_Loding.ShowLoadingScreen(this);
                {
                    _Application app = new Microsoft.Office.Interop.Excel.Application();
                    _Workbook workbook = app.Workbooks.Add(Type.Missing);
                    _Worksheet worksheet = null;
                    //app.Visible = false;
                    worksheet = workbook.Sheets["Sheet1"];
                    worksheet = workbook.ActiveSheet;
                    worksheet.Name = "Records";
                    worksheet.DisplayRightToLeft = true;
                    app.DisplayAlerts = false;


                    try
                    {
                        Frm_Loding.ShowLoadingScreen(this);
                        {
                            for (int ii = 0; ii < dataGrid_Azmondadeh.Columns.Count; ii++)
                            {
                                worksheet.Cells[1, ii + 1] = dataGrid_Azmondadeh.Columns[ii].HeaderText;
                            }
                            for (int ii = 0; ii < dataGrid_Azmondadeh.Rows.Count; ii++)
                            {
                                for (int j = 0; j < dataGrid_Azmondadeh.Columns.Count; j++)
                                {
                                    if (dataGrid_Azmondadeh.Rows[ii].Cells[j].Value != null)
                                    {
                                        worksheet.Cells[ii + 2, j + 1] = dataGrid_Azmondadeh.Rows[ii].Cells[j].Value.ToString();
                                    }
                                    else
                                    {
                                        worksheet.Cells[ii + 2, j + 1] = "";
                                    }
                                }
                            }
                        }
                        Frm_Loding.CloseLoadingScreen();
                        //Getting the location and file name of the excel to save from user. 
                        SaveFileDialog saveDialog = new SaveFileDialog();
                        saveDialog.Filter = "Excel files (*.xlsx)|*.xlsx|All files (*.*)|*.*";
                        saveDialog.FilterIndex = 2;
                        if (saveDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                        {
                            workbook.SaveAs(saveDialog.FileName);
                            FarsiMessage.Show("فایل خروجی ذخیره گردید.", "پایان عمیات", FarsiMessageBoxButtons.OK, FarsiMessageBoxIcons.Information);
                        }
                        else { app.DisplayAlerts = false; }
                    }
                    catch (System.Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                    finally
                    {
                        app.Quit();
                        workbook = null;
                        worksheet = null;
                    }
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); }

 

بسته شده

2 پاسخ

+1 امتیاز
 
بهترین پاسخ

سلام

ببین با شرط حلقه میاییم ستون ها و سطرها رو از دیتاگرید میخونیم میدیم به اکسل 

خب الان اگه مقادیر اونا رو تغییر بدید از سطر دوم و ستون دوم شروع میشه 

تو کد زیر توضیح دادم

 و کد تست شده

if (dataGrid_Azmondadeh.Rows[ii].Cells[j].Value != null)
                        {
                            worksheet.Cells[ii + 2, j + 1] = dataGrid_Azmondadeh.Rows[ii].Cells[j].Value.ToString();
 
                        }
  //به 2 تقیر بدی سطر اول حذف میشه   //cell اگر مقدار 

************************************************************************************************

بصورت کلی

 

 try
            {
                // creating Excel Application 

                _Application app = new Microsoft.Office.Interop.Excel.Application();


                // creating new WorkBook within Excel application 

                _Workbook workbook = app.Workbooks.Add(Type.Missing);


                // creating new Excelsheet in workbook 

                _Worksheet worksheet = null;

                // see the excel sheet behind the program 

                app.Visible = true;
                // get the reference of first sheet. By default its name is Sheet1. 

                // store its reference to worksheet 


                worksheet = (Worksheet)workbook.Sheets["Sheet1"];

                worksheet = (Worksheet)workbook.ActiveSheet;

                // changing the name of active sheet 

                worksheet.Name = "Exported from gridview";


                // storing header part in Excel 

                for (int i = 1; i < dataGridView1.Columns.Count + 1; i++)

                {

                    worksheet.Cells[1, i] = dataGridView1.Columns[i - 1].HeaderText;
                 //به 2 تقیر بدی سطر اول حذف میشه   //cell اگر مقدار 
                }

                // storing Each row and column value to excel sheet 

                for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)

                {
                   //رو به 1 تغییر بدی ستوان اول حذف میشه // j اگر مقدار 

                    for (int j = 0; j < dataGridView1.Columns.Count; j++)

                    {

                        worksheet.Cells[i + 2, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString();

                    }

                }


                // save the application 

                // workbook.SaveAs("g:\\output.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

                SaveFileDialog sfd = new SaveFileDialog();
                sfd.Filter = "Excel Document(*.xlsx)|*.xlsx";
                // sfd.FileName = "Export";
                if (sfd.ShowDialog() == DialogResult.OK)
                {
                    workbook.SaveAs(sfd.FileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                }

                // Exit from the application 
                wait();
                app.Quit();

            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                endwait();
            }













با تغییر مقدار j به 1 فقط اطلاعات موجود در ستون حذف میشه ولی ستون به خروجی اضافه میشه، من می خوام ستون هم به خروجی اضافه نشود.

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

توسط (252 امتیاز) 4 13 22
+1 امتیاز

سلام

پاسخ قسمت اول بلی میشه فرمت رو تعین کرد

newSheet.Cells[i, j].NumberFormat = "m/d/yyyy"


newSheet.Cells[i, j].HorizontalAlignment = ExcelAlignment.xlLeft; //or Excel.XlHAlign.xlHAlignLeft


/////////////////فرمت تاریخ
 
Excel.Range formatRange;
formatRange = xlWorkSheet.get_Range("a1", "b1");
formatRange.NumberFormat = "mm/dd/yyyy";
//formatRange.NumberFormat = "mm/dd/yyyy hh:mm:ss";
xlWorkSheet.Cells[1, 1] = "31/5/2014";


///////////////////////ترکیب سلوس merg
 
xlWorkSheet.get_Range("b2", "e3").Merge(false);

///////////////اضافه کردن هدر
 
xlWorkSheet.get_Range("b2", "e3").Merge(false);
chartRange = xlWorkSheet.get_Range("b2", "e3");
chartRange.FormulaR1C1 = "Your Heading Here";
chartRange.HorizontalAlignment = 3;
chartRange.VerticalAlignment = 3;

 

 

پاسخ قسمت دوم

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel; 

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();

            if (xlApp == null)
            {
                MessageBox.Show("Excel is not properly installed!!");
                return;
            }


            Excel.Workbook xlWorkBook;
            Excel.Worksheet xlWorkSheet;
            object misValue = System.Reflection.Missing.Value;

            xlWorkBook = xlApp.Workbooks.Add(misValue);
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
            
            xlWorkSheet.Cells[1, 1] = "ID";
            xlWorkSheet.Cells[1, 2] = "Name";
            xlWorkSheet.Cells[2, 1] = "1";
            xlWorkSheet.Cells[2, 2] = "One";
            xlWorkSheet.Cells[3, 1] = "2";
            xlWorkSheet.Cells[3, 2] = "Two";



            xlWorkBook.SaveAs("d:\\csharp-Excel.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
            xlWorkBook.Close(true, misValue, misValue);
            xlApp.Quit();

            Marshal.ReleaseComObject(xlWorkSheet);
            Marshal.ReleaseComObject(xlWorkBook);
            Marshal.ReleaseComObject(xlApp);

            MessageBox.Show("Excel file created , you can find the file d:\\csharp-Excel.xls");
        }

    }
}

با این روش میتونی هر ستونی رو خواستی حذف کنی

using (ExcelEngine excelEngine = new ExcelEngine())
{
  IApplication application = excelEngine.Excel;
  application.DefaultVersion = ExcelVersion.Excel2013;
  IWorkbook workbook = application.Workbooks.Open("Sample.xlsx");
  IWorksheet worksheet = workbook.Worksheets[0];

  //Delete a row
  worksheet.DeleteRow(3);
  //Delete a column
  worksheet.DeleteColumn(2);

  workbook.SaveAs("Book1.xlsx");
}

 

 

 

 

 

 

 

 int cr = 1;
            int cc = 1;
           
            //حرکت تو سلول های دیتاگرید
            for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
            {

                for (int j = 0; j < dataGridView1.Columns.Count; j++)
                {
                    // Excel index starts from 1,1. As first Row would have the Column headers, adding a condition check. 
                    if (cr == 1)
                    {
                        xlWorkSheet.Cells[cr, cc] = dataGridView1.Columns[j].HeaderText;
                    }

                    cc++;
                }
                cc = 1;
                cr++;


            } 
            
            //اینجا میتونی ستون های یی رو که نمیخایی حذف کنی
            for (int i = 0; i <= dataGridView1.RowCount - 1; i++)
            {
                for (int j = 0; j <dataGridView1.Columns.Count; j++)
                {
                    DataGridViewCell cell = dataGridView1[j, i];
                    xlWorkSheet.Cells[i + 2, j + 1] = cell.Value;
                    
                }
            }

 

 

 

 

دوست عزیز ویرایش رو انجام دادم اما تست نکردم چون لپ تاپم همرام نیست تست کنید نتیجه رو بگید


 

 

 

 

 

 


            try
            {
                Frm_Loding.ShowLoadingScreen(this);
                {
                    _Application app = new Microsoft.Office.Interop.Excel.Application();
                    _Workbook workbook = app.Workbooks.Add(Type.Missing);
                    _Worksheet worksheet = null;
                    //app.Visible = false;
                    worksheet = workbook.Sheets["Sheet1"];
                    worksheet = workbook.ActiveSheet;
                    worksheet.Name = "Records";
                    worksheet.EnableFormatConditionsCalculation = true;
                    worksheet.Cells.NumberFormat = worksheet.Cells.Characters.Text;
                    worksheet.DisplayRightToLeft = true;
                    app.DisplayAlerts = false;


                    try
                    {
                        Frm_Loding.ShowLoadingScreen(this);
                        {
                            for (int ii = 1; ii < dataGrid_Azmondadeh.Columns.Count; ii++)
                            {
                                worksheet.Cells[1, ii + 1] = dataGrid_Azmondadeh.Columns[ii].HeaderText;
                            }
                            for (int ii = 1; ii < dataGrid_Azmondadeh.Rows.Count; ii++)
                            {
                                for (int j = 1; j < dataGrid_Azmondadeh.Columns.Count; j++)
                                {
                                    if (dataGrid_Azmondadeh.Rows[ii].Cells[j].Value != null)
                                    {
                                        worksheet.Cells[ii + 2, j + 1] = dataGrid_Azmondadeh.Rows[ii].Cells[j].Value.ToString();

                                    }
                                    else
                                    {
                                        worksheet.Cells[ii + 2, j + 1] = "";
                                    }
                                }
                            }
                        }
                        Frm_Loding.CloseLoadingScreen();
                        //Getting the location and file name of the excel to save from user. 
                        SaveFileDialog saveDialog = new SaveFileDialog();
                        saveDialog.Filter = "Excel files (*.xlsx)|*.xlsx|All files (*.*)|*.*";
                        saveDialog.FilterIndex = 2;
                        if (saveDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                        {
                            workbook.SaveAs(saveDialog.FileName);
                            FarsiMessage.Show("فایل خروجی ذخیره گردید.", "پایان عمیات", FarsiMessageBoxButtons.OK, FarsiMessageBoxIcons.Information);
                        }
                        else { app.DisplayAlerts = false; }
                    }
                    catch (System.Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                    finally
                    {
                        app.Quit();
                        workbook = null;
                        worksheet = null;
                    }
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); }

 

ویرایش شده توسط
توسط (7,164 امتیاز) 4 7 141

سلام

وقتی می رسه به خط «worksheet.Cells.NumberFormat = worksheet.Cells.Characters.Text;» خطای زیر رو می داد که به صورت زیر رفعش کردم:
Unable to get the Text property of the Characters class

worksheet.Cells.NumberFormat = "@";

** حالا می خوام ستون اول رو حذف کنم، چطوری باید عمل کنم؟

ویرایش شده توسط
توسط (252 امتیاز) 4 13 22
سوال جدید

2,337 سوال

2,871 پاسخ

3,725 دیدگاه

3,920 کاربر

دسته بندی ها

...