PDA

View Full Version : مشکل در خروجی اکسل (فونت فارسی نمایش داده نمیشه)



javid_debugger
دوشنبه 02 دی 1392, 16:20 عصر
سلام من از کد زیر برای خروجی اکسل در پروژه ام استفاده می کنم ولی چون دیتای موجود در دیتاگریدم فارسی است به خاطر همین فایل خروجی رو با فونت نا معلوم نشون میده


private void ExportToEcxel(DataGridView datagridview1, string filename)
{
string stOutput = "";
string sHeader = "";
for (int i = 0; i < datagridview1.Columns.Count; i++)
sHeader = sHeader.ToString() + Convert.ToString(datagridview1.Columns[i].HeaderText) + "\t";
stOutput += sHeader + "\r\n";
for (int j = 0; j < datagridview1.RowCount -1; j++)
{
string stLine = "";
for (int k = 0; k < datagridview1.Rows[j].Cells.Count; k++)
stLine = stLine.ToString() + Convert.ToString(datagridview1.Rows[j].Cells[k].Value) + "\t";
stOutput += stLine + "\r\n";
}
Encoding utf8 = Encoding.GetEncoding("windows-1256");
byte[] Output = utf8.GetBytes(stOutput);
FileStream fs = new FileStream (filename,FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(Output,0,Output.Length);
bw.Flush();
bw.Close();
fs.Close();
}


SaveFileDialog sdf = new SaveFileDialog();
sdf.Filter = "Excel Document(*.Xls)|*.Xls";
sdf.FileName = "Export";

if(sdf.ShowDialog()==DialogResult.OK)
{
ExportToEcxel(dataGridView1,sdf.FileName);
}

اگر کسی می دونه راه نماییم کنه. ممنونم

javid_debugger
دوشنبه 02 دی 1392, 16:22 عصر
این خط دقیقا برای نمایش فونت فارسیه ولی جواب نمیده


Encoding utf8 = Encoding.GetEncoding("windows-1256");

a_mzadeh
دوشنبه 02 دی 1392, 16:48 عصر
سلام؛ این رشته رو ابتدای stOutput اضافه کن،

"\xEF\xBB\xBF"

javid_debugger
دوشنبه 02 دی 1392, 16:56 عصر
سلام دوست عزیز من زیاد حرفه ای نیستم تو سی شارپ. دقیقا باید کجا این رشته رو اضافه کنم؟

با تشکر

a_mzadeh
دوشنبه 02 دی 1392, 17:06 عصر
stOutput = "\xEF\xBB\xBF" + stOutput
byte[] Output = utf8.GetBytes(stOutput);

a_mzadeh
دوشنبه 02 دی 1392, 17:09 عصر
من قبلا از این کامپوننت استفاده کردم و مشکلی نداشت، خیلی هم کامل هست :)

http://www.smartxls.com

امیدوارم به درد شما هم بخوره

javid_debugger
دوشنبه 02 دی 1392, 17:22 عصر
از این کد استفاده کردم ولی متاسفانه بازم جواب نداد.

javid_debugger
دوشنبه 02 دی 1392, 19:27 عصر
کسی نیست کمک کنه؟

a_mzadeh
دوشنبه 02 دی 1392, 20:22 عصر
این نمونه کد رو من بدون مشکل استفاده کردم و جواب داد:

WorkBook wb = new WorkBook();

string path = "path";
string name = "name";
string type = "type";
string realPath = "realPath";
string realName = "realName";

int row = 0;
wb.setText(row, 0, "نام سند:");
wb.setText(row, 1, name);
++row;
wb.setText(row, 0, "مسير سند:");
wb.setText(row, 1, path);
++row;
wb.setText(row, 0, "مسير ذخيره سازي:");
wb.setText(row, 1, realPath);
++row;
wb.setText(row, 0, "نام اصلي فايل:");
wb.setText(row, 1, realName);
++row;
wb.setText(row, 0, "نوع سند:");
wb.setText(row, 1, type);
++row;

wb.writeXLSX("output.xlsx");


ممکن هست داده‌ها به درستی از دیتابیس load نمی‌شن، پیشنهاد می‌کنم قبل از ذخیره خروجی، ابتدا اون رو تو یک فایل متنی ساده لاگ کنید تا صحت اطلاعات مطمئن بشید.

دلتنگ اسمان
سه شنبه 03 دی 1392, 15:35 عصر
سلام.
بنده از این کدها استفاده کردم مشکلی ندارم:


private void btn_print_Click(object sender, EventArgs e)
{
// creating Excel Application
object mis = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();

// creating new WorkBook within Excel application
Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);

Microsoft.Office.Interop.Excel._Worksheet worksheet = null;
app.Visible = false;

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

worksheet = (Worksheet)workbook.ActiveSheet;

worksheet.Name = "Export";

// storing header part in Excel
for(int i=1;i<dataGridView1.Columns.Count+1;i++)
{
worksheet.Cells[1, i] = dataGridView1.Columns[i - 1].HeaderText;
}

for (int i=0; i < dataGridView1.Rows.Count-1 ; i++)
{
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
SaveFileDialog sdf = new SaveFileDialog();
sdf.Filter = "Excel Document(*.xls)|*.xls";
sdf.FileName = "Export";

if (sdf.ShowDialog() == DialogResult.OK)
{
workbook.SaveAs(sdf.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

app.Quit();


}

elahe1364
سه شنبه 03 دی 1392, 15:46 عصر
این کد هم مشکلی نداره

Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application();
ExcelApp.Application.Workbooks.Add(Type.Missing);
ExcelApp.Visible = true;
ExcelApp.Columns.ColumnWidth = 20;
int k = 1;
for (int i = 0; i < dgvTemp.Rows.Count; i++)
{
k = 1;
for (int j = 0; j < dgvTemp.Columns.Count; j++)
{
if (dgvTemp.Columns[j].Visible && dgvTemp.Rows[i].Cells[j].Value != null)
{
ExcelApp.Cells[1, k] = dgvTemp.Columns[j].HeaderText;
ExcelApp.Cells[i + 2, k] = dgvTemp.Rows[i].Cells[j].Value.ToString();
k++;
}
}
}

javid_debugger
سه شنبه 03 دی 1392, 21:35 عصر
سلام.
بنده از این کدها استفاده کردم مشکلی ندارم:


private void btn_print_Click(object sender, EventArgs e)
{
// creating Excel Application
object mis = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();

// creating new WorkBook within Excel application
Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);

Microsoft.Office.Interop.Excel._Worksheet worksheet = null;
app.Visible = false;

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

worksheet = (Worksheet)workbook.ActiveSheet;

worksheet.Name = "Export";

// storing header part in Excel
for(int i=1;i<dataGridView1.Columns.Count+1;i++)
{
worksheet.Cells[1, i] = dataGridView1.Columns[i - 1].HeaderText;
}

for (int i=0; i < dataGridView1.Rows.Count-1 ; i++)
{
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
SaveFileDialog sdf = new SaveFileDialog();
sdf.Filter = "Excel Document(*.xls)|*.xls";
sdf.FileName = "Export";

if (sdf.ShowDialog() == DialogResult.OK)
{
workbook.SaveAs(sdf.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

app.Quit();


}

سلام ممنون از شما ولی این کد برای نمایش در اکسل است نه خروجی. اتفاقا من از همین کد برای نمایش در اکسل استفاده کردم. پروژه من هم نمایش در اکسل داره و هم خروجی اکسل که متاسفانه مشکل در خروجی است.

ممنون از شما

اوبالیت به بو
شنبه 19 بهمن 1392, 23:38 عصر
دوستان من هم مشکل عدم نمایش صحیح کاراکتر فارسی رو دارم به گونه ای که محتوای فایل اکسل به این صورت نشون داده میشه: ؟#ت!ط%ی..

Davidd
یک شنبه 20 بهمن 1392, 09:32 صبح
من قبلا از این کامپوننت استفاده کردم و مشکلی نداشت، خیلی هم کامل هست :)

http://www.smartxls.com

امیدوارم به درد شما هم بخوره

اين كومپوننت رايگانه يا نه؟ آخه تو سايتش قسمت سفارش و خريد داره

ALI TT
یک شنبه 20 بهمن 1392, 09:33 صبح
سلام من از کد زیر برای خروجی اکسل در پروژه ام استفاده می کنم ولی چون دیتای موجود در دیتاگریدم فارسی است به خاطر همین فایل خروجی رو با فونت نا معلوم نشون میده


private void ExportToEcxel(DataGridView datagridview1, string filename)
{
string stOutput = "";
string sHeader = "";
for (int i = 0; i < datagridview1.Columns.Count; i++)
sHeader = sHeader.ToString() + Convert.ToString(datagridview1.Columns[i].HeaderText) + "\t";
stOutput += sHeader + "\r\n";
for (int j = 0; j < datagridview1.RowCount -1; j++)
{
string stLine = "";
for (int k = 0; k < datagridview1.Rows[j].Cells.Count; k++)
stLine = stLine.ToString() + Convert.ToString(datagridview1.Rows[j].Cells[k].Value) + "\t";
stOutput += stLine + "\r\n";
}
Encoding utf8 = Encoding.GetEncoding("windows-1256");
byte[] Output = utf8.GetBytes(stOutput);
FileStream fs = new FileStream (filename,FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(Output,0,Output.Length);
bw.Flush();
bw.Close();
fs.Close();
}


SaveFileDialog sdf = new SaveFileDialog();
sdf.Filter = "Excel Document(*.Xls)|*.Xls";
sdf.FileName = "Export";

if(sdf.ShowDialog()==DialogResult.OK)
{
ExportToEcxel(dataGridView1,sdf.FileName);
}

اگر کسی می دونه راه نماییم کنه. ممنونم

به جای خط 15 و 16 اینو امتحان کن


byte[] Output = Encoding.UTF8.GetBytes(stOutput);



اگه نشد اینو امتحان کن:
تنظیمات بخش زیر را در ویندوز عوض کن:

Control Panel > Regional and Language Option > Tab(Advance)
اگه فارسیه ؟ بزارش روی اینگلیسی و اگه اینگلیسه بزارش رو فارسی
سیستم رو ری استارت کن (ازت میخواد اینکارو انجام بدی و تو تایید کن)
بعد دوباره با کدی که دادم امتحان کن
اینم بد نیست


byte[] Output = Encoding.Default.GetBytes(stOutput);


کد بالا رو بجای کد اول هم تست کن