PDA

View Full Version : حرفه ای: تعداد ستونهای ارسال شده به اکسل 26 تا هست و بقیه ستونها ارسال نمیشن



navidiran
دوشنبه 14 اسفند 1391, 14:15 عصر
اطلاعات رو با کد زیر به اکسل میفرستم


Range[ ] rng = newRange[ ColNumber ];

for ( int x = 0; x < ColNumber; x++ )
{


string cellAddress = Convert.ToString( Convert.ToChar( Convert.ToByte( x + 65 ) ) ) + "1";
rng[ x ] = ExcelSheet.get_Range( cellAddress , cellAddress );

}



اما ستونها رو تا آخر ستون Z میفرسته بعنی به تعداد حروف انگلیسی که 26 حرف است و ستون بعدی که در اکسل همون AA و AB و ... هست رو دیگه نمیبینه و به اکسل نمیفرسته.
کسی میتونه راهی بگه که بقیه ستونها هم به اکسل فرستاده بشن؟

navidiran
دوشنبه 14 اسفند 1391, 18:43 عصر
دوستان کمکی داشته باشید ممنون میشم / خیلی احتیاج دارم و وقت زیادی هم گذاشتم و هنوز حل نشده

pedram.11
دوشنبه 14 اسفند 1391, 18:58 عصر
سلام من تاحالا با اکسل کار نکردم اما اگه توجه کنید شما توی تعیین آدرس اشتباه کردید، تا وقتی که به Z رسیدید آدرس به صورت یک کاراکتر هست اما از اون به بعد دوباره از AA تبدیل به دو حرف میشه ولی شما همینطور کاراکتر رو بالاتر میبرید و بعد از Z بجای AA آدرستون براکت چپ ("[") میشه

ma.rad
دوشنبه 14 اسفند 1391, 19:02 عصر
این کاملشه:

private void dgv2excel(DataGridView dgr, DataTable dtt)
{
Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook excelBook = excelApp.Workbooks.Add(Microsoft.Office.Interop.Ex cel.XlSheetType.xlWorksheet);
Microsoft.Office.Interop.Excel.Worksheet excelWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)(excelBo ok.Worksheets[1]);

excelWorksheet.DisplayRightToLeft = true;

int i;
int cl = dgr.Columns.Count;
Microsoft.Office.Interop.Excel.Range[] rng = new Microsoft.Office.Interop.Excel.Range[cl];
for (i = 0; i < cl; i++)
{
if (i < 26)
{
string cellAdress = Convert.ToString(Convert.ToChar(Convert.ToByte(i + 65))) + "1";
rng[i] = excelWorksheet.get_Range(cellAdress, cellAdress);
rng[i].Value2 = dgr.Columns[i].HeaderText;
}
else
{
int h = 0;
for (int l = 26; l < cl; l++)
{
string cellAdress1 = Convert.ToString(Convert.ToChar(Convert.ToByte(65) )) + Convert.ToString(Convert.ToChar(Convert.ToByte(h + 65))) + "1";
rng[l] = excelWorksheet.get_Range(cellAdress1, cellAdress1);
rng[l].Value2 = dgr.Columns[l].HeaderText;
h++;
}
}

}


int j = 2;

foreach (DataRow r in dtt.Rows)
{
int h = 0;
for (int k = 0; k < cl; k++)
{
if (k < 26)
{
string cellAdress = Convert.ToString(Convert.ToChar(Convert.ToByte(k + 65))) + j.ToString();
rng[k] = excelWorksheet.get_Range(cellAdress, cellAdress);
rng[k].Value2 = r[k].ToString();
}
else
{
string cellAdress1 = Convert.ToString(Convert.ToChar(Convert.ToByte(65) )) + Convert.ToString(Convert.ToChar(Convert.ToByte(h + 65))) + j.ToString();
rng[k] = excelWorksheet.get_Range(cellAdress1, cellAdress1);
rng[k].Value2 = r[k].ToString();
h++;
}

}
j++;

}
excelApp.Visible = true;
}

aslan
دوشنبه 14 اسفند 1391, 19:39 عصر
سلام
ببینید از کد زیر میتونید استفاده کنید ( در ارتباط با آدرس Cell)


public static string CellAddress(int row , int col)
{
if (col < 0) return String.Empty;
return tmpCellAddress(col)+row.ToString();
}
public static string tmpCellAddress(int col)
{
if (col < 0) return String.Empty;

int remainder = col % 26;
int value = col / 26;

return value == 0 ?
String.Format("{0}", Convert.ToChar(65 + remainder)) :
String.Format("{0}{1}", tmpCellAddress(value - 1), Convert.ToChar(65 + remainder));
}

aslan
دوشنبه 14 اسفند 1391, 19:43 عصر
public static void ExportToExcelFile(DataGridView dgv , string sfdFileName)
{
try
{

System.Globalization.CultureInfo oldCI = System.Threading.Thread.CurrentThread.CurrentCultu re;
System.Threading.Thread.CurrentThread.CurrentCultu re = new System.Globalization.CultureInfo("en-US");

Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook excelBook = excelApp.Workbooks.Add(XlSheetType.xlWorksheet);
Microsoft.Office.Interop.Excel.Worksheet excelWorksheet = (Worksheet)(excelBook.Worksheets[1]);
excelWorksheet.DisplayRightToLeft = true;
object misValue = System.Reflection.Missing.Value;


int ClmnCnt = dgv.Columns.Count;
Range[] rng = new Range[ClmnCnt];
int iCol = 0;
for (int i = 0; i < ClmnCnt; ++i )
{
if ( dgv.Columns[i].Visible)
{
string CellAddress = Convert.ToString(Convert.ToChar(Convert.ToByte(i - iCol + 65)) + "1");
rng[i] = excelWorksheet.get_Range(CellAddress, CellAddress);
rng[i].Value2 = dgv.Columns[i].HeaderText;
}
else
{
iCol++;
}
}
for (int i = 0; i <= dgv.RowCount - 1; i++)
{
iCol = 0;
for (int j = 0; j <= dgv.ColumnCount - 1; j++)
{
if (dgv.Columns[j].Visible)
{

DataGridViewCell cell = dgv[j , i];
excelWorksheet.Cells[i + 3 + 1, j- iCol + 1] = cell.Value;
}
else
{
iCol++;
}

}
}

excelBook.SaveAs(sfdFileName, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
excelBook.Close(true, misValue, misValue);
excelApp.Quit();
releaseObject(excelWorksheet);
releaseObject(excelBook);
releaseObject(excelApp);
MessageBox.Show(" فایل ایجاد شد ");
return;

}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());

}

}