PDA

View Full Version : کد معادل با این قطعه کد Vb در #C



sirvan-me
دوشنبه 15 خرداد 1391, 11:14 صبح
سلام من یه سورس برای دسترسی به محتویات فایل های XLSX به دست آوردم اما کد ها به زبان Vb هستن . می خواستم دوستان هر کس می تونه معادل اون بخش از کد که با Comment End - Start مشخص کردم رو به #C رو بهم بگه . ممنون . نکته ی جالب اینه که من خودم یه برنامه نوشته بودم که این کار رو می کرد اما باید اسم Sheet رو مشخص می کردی اما تو این برنامه نیاز به مشخص کردن اسم Sheet نیست .



Public Class Form1
Dim sConnString As String
Dim myArray(10) As String
Private Sub btnReadExcelFile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReadExcelFile.Click
Read_Excel_File("C:\Users\Mehdi\Desktop\sahmiye.xlsx")
End Sub
Private Sub Read_Excel_File(ByVal ExcelFile_name As String)
Dim objConn As Object
Dim objCat As Object
Dim sWorkbook As String
Dim table_name As String

Try
Dim myDataSource As String
myDataSource = ExcelFile_name

sWorkbook = myDataSource
sConnString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & sWorkbook & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES"""
'Start
objConn = CreateObject("ADODB.Connection")
objConn.Open(sConnString)
objCat = CreateObject("ADOX.Catalog")
objCat.ActiveConnection = objConn



table_name = objCat.tables(0).Name
set_table_contents_to_datagridview1(table_name)

objConn.Close()
objCat = Nothing
objConn = Nothing
'End
Catch ex As Exception
objConn.Close()
MsgBox(ex.ToString)
objCat = Nothing
objConn = Nothing
End Try
End Sub
Private Sub set_table_contents_to_datagridview1(ByVal table_name As String)
Try
Dim cn As System.Data.OleDb.OleDbConnection
Dim cmd As System.Data.OleDb.OleDbDataAdapter

cn = New System.Data.OleDb.OleDbConnection(sConnString)
cmd = New System.Data.OleDb.OleDbDataAdapter(String.Format("select * from [{0}]", table_name), cn)
cn.Open()

Dim ds2 As New DataSet
cmd.Fill(ds2)
dg.DataSource = ds2.Tables(0)

cn.Close()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub

End Class

en.reza
دوشنبه 15 خرداد 1391, 19:47 عصر
سلام
از نرم افزار vb to c# convertor استفاده کن

hunter_ara
دوشنبه 15 خرداد 1391, 22:27 عصر
public class Form1
{
string sConnString;
string[] myArray = new string[11];
private void // ERROR: Handles clauses are not supported in C#
btnReadExcelFile_Click(System.Object sender, System.EventArgs e)
{
Read_Excel_File("C:\\Users\\Mehdi\\Desktop\\sahmiye.xl sx");
}
private void Read_Excel_File(string ExcelFile_name)
{
object objConn = null;
object objCat = null;
string sWorkbook = null;
string table_name = null;

try {
string myDataSource = null;
myDataSource = ExcelFile_name;

sWorkbook = myDataSource;
sConnString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + sWorkbook + ";" + "Extended Properties=\"Excel 8.0;HDR=YES\"";
//Start
objConn = Interaction.CreateObject("ADODB.Connection");
objConn.Open(sConnString);
objCat = Interaction.CreateObject("ADOX.Catalog");
objCat.ActiveConnection = objConn;



table_name = objCat.tables(0).Name;
set_table_contents_to_datagridview1(table_name);

objConn.Close();
objCat = null;
objConn = null;
//End
} catch (Exception ex) {
objConn.Close();
Interaction.MsgBox(ex.ToString);
objCat = null;
objConn = null;
}
}
private void set_table_contents_to_datagridview1(string table_name)
{
try {
System.Data.OleDb.OleDbConnection cn = default(System.Data.OleDb.OleDbConnection);
System.Data.OleDb.OleDbDataAdapter cmd = default(System.Data.OleDb.OleDbDataAdapter);

cn = new System.Data.OleDb.OleDbConnection(sConnString);
cmd = new System.Data.OleDb.OleDbDataAdapter(string.Format(" select * from [{0}]", table_name), cn);
cn.Open();

DataSet ds2 = new DataSet();
cmd.Fill(ds2);
dg.DataSource = ds2.Tables(0);

cn.Close();
} catch (Exception ex) {
Interaction.MsgBox(ex.ToString);
}
}

}

sirvan-me
دوشنبه 15 خرداد 1391, 22:31 عصر
public class Form1
{
string sConnString;
string[] myArray = new string[11];
private void // ERROR: Handles clauses are not supported in C#‎
btnReadExcelFile_Click(System.Object sender, System.EventArgs e)
{
Read_Excel_File("C:\\Users\\Mehdi\\Desktop\\sahmiye.xl sx");
}
private void Read_Excel_File(string ExcelFile_name)
{
object objConn = null;
object objCat = null;
string sWorkbook = null;
string table_name = null;

try {
string myDataSource = null;
myDataSource = ExcelFile_name;

sWorkbook = myDataSource;
sConnString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + sWorkbook + ";" + "Extended Properties=\"Excel 8.0;HDR=YES\"";
//Start
objConn = Interaction.CreateObject("ADODB.Connection");
objConn.Open(sConnString);
objCat = Interaction.CreateObject("ADOX.Catalog");
objCat.ActiveConnection = objConn;



table_name = objCat.tables(0).Name;
set_table_contents_to_datagridview1(table_name);

objConn.Close();
objCat = null;
objConn = null;
//End
} catch (Exception ex) {
objConn.Close();
Interaction.MsgBox(ex.ToString);
objCat = null;
objConn = null;
}
}
private void set_table_contents_to_datagridview1(string table_name)
{
try {
System.Data.OleDb.OleDbConnection cn = default(System.Data.OleDb.OleDbConnection);
System.Data.OleDb.OleDbDataAdapter cmd = default(System.Data.OleDb.OleDbDataAdapter);

cn = new System.Data.OleDb.OleDbConnection(sConnString);
cmd = new System.Data.OleDb.OleDbDataAdapter(string.Format(" select * from [{0}]", table_name), cn);
cn.Open();

DataSet ds2 = new DataSet();
cmd.Fill(ds2);
dg.DataSource = ds2.Tables(0);

cn.Close();
} catch (Exception ex) {
Interaction.MsgBox(ex.ToString);
}
}

}

مرسی فقط این کد اجرا نمیشه ها ... باید کتابخانه ی خاصی رو Using کنم ؟

hunter_ara
دوشنبه 15 خرداد 1391, 23:41 عصر
مرسی فقط این کد اجرا نمیشه ها ... باید کتابخانه ی خاصی رو Using کنم ؟

error???
هندلر ها رو اد کردی؟

sirvan-me
سه شنبه 16 خرداد 1391, 10:28 صبح
error???
هندلر ها رو اد کردی؟

منظور همون Microsoft.VisualBasic ؟ اونو Using کردم . دقیقا باید چکار کنم ؟
روی متغیر objCon اررور میده ...

http://www.up.vatandownload.com/images/i53curp7oo3bsb9078m.jpg

اگه بتونید یه کدی بهم معرفی کنید که بتونم تعداد Sheet ها و اسم Sheet های یه فایل Excel رو بخونم بعد پاس بدم به تابعم خیلی ممنون میشم .

sirvan-me
پنج شنبه 18 خرداد 1391, 10:01 صبح
کسی نیست جواب من و بده ؟!!!!!!!!

Saeed_m_Farid
پنج شنبه 18 خرداد 1391, 11:25 صبح
به به، دوستان چه جوابایی دادن:متعجب:
البته شما هم سوال درست نپرسیدی، ولی خوب راه رو اشتباه رفتی و پرسیدی که جواب بگیری؛ جوابایی که بچه ها دادن جالبه، انگار مجبورن ...
همه چی با کانورت (http://www.developerfusion.com/tools/convert/vb-to-csharp/) چشم بسته که درست نمیشه، یه نگاهی هم باید به کد کرد. به هرصورت، استفاده از ADO در COM object هایی که تو ویندوز 7 کامپایل میشن قابل استفاده تو نسخه های قبلی ویندوز (از جمله XP) نیستن : 1 (http://support.microsoft.com/kb/2640696) و 2 (http://social.msdn.microsoft.com/Forums/en/windowsgeneraldevelopmentissues/thread/3a4ce946-effa-4f77-98a6-34f11c6b5a13):


An ADO-based application that is compiled in Windows 7 SP1 or in Windows Server 2008 R2 SP1 does not run in earlier versions of Windows
این یعنی برنامه های شما مثلاً اگه تو ویندوز 7 SP1 نوشته شده باشه، فقط تو همون نسخه یا بالاتر قابل استفاده هست و می دونید که 86.235% هموطنامون از XP و پایین تر استفاده می کنن:لبخند: کلاً استفاده از ADO و COM های قدیمی، بنظرمن که کار منسوخی هست ...

پس بهتره استفاده از ADO رو بیخیال بشین و از راه های خیلی راحت تر و بهتری واسه این کار هستند استفاده کنید :
public void Read_Excel_File(string ExcelFile_name)
{
OleDbConnection theConnection = null;
try
{
theConnection = new OleDbConnection(
String.Format(
"provider=Microsoft.Jet.OLEDB.4.0;data source={0};Extended Properties=\"Excel 8.0;HDR=NO;IMEX=1;\"",
ExcelFile_name));
theConnection.Open();
OleDbDataAdapter theDataAdapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", theConnection);
DataSet theDS = new DataSet();
DataTable dt = new DataTable();
theDataAdapter.Fill(dt);
this.dg.DataSource = dt.DefaultView;
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.Message);
throw;
}
finally
{
if (theConnection != null)
theConnection.Close();
}
}

اینم می تونید تست کنید، که از Sheet هر استفاده ای خواستید میشه کرد، نه فقط نمایش تو DataGridView :

using (OleDbConnection conn = new OleDbConnection(connString))
{
conn.Open();
dtSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
Sheet1= dtSchema.Rows[0].Field<string>(ExcelFile_name);
}




باید OleDbConnection رو به پروژتون اضافه کنید.
تست نکردم!

Saeed_m_Farid
پنج شنبه 18 خرداد 1391, 12:57 عصر
اولاً امتجان کردم کد رو اشکال داشت :لبخند:
بعدش اون دو تا کد بالایی رو قاطی کنی این درمیاد:


/// <summary>
/// Getting the first sheet from an Excel document
/// regardless of sheet name with OleDb
/// </summary>
/// <param name="ExcelFile_name">
/// A string value represent excel file path
/// </param>
/// <returns>
/// A DataView of retrieved DataTable's DefaultView
/// </returns>
/// <remarks>
/// Using the Tables Enum it will return a list of all the worksheet names
/// </remarks>
/// <see>
/// http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbschemaguid.columns.aspx
/// </see>
public DataView Read_Excel_File(string ExcelFile_name)
{
try
{
string first,
connString =
String.Format(
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=YES\"",
ExcelFile_name);
using (OleDbConnection conn = new OleDbConnection(connString))
{
conn.Open();
DataTable dtSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
first = dtSchema.Rows[0]["TABLE_NAME"].ToString();
OleDbDataAdapter theDataAdapter = new OleDbDataAdapter("SELECT * FROM [" + first + "]", conn);
DataSet theDS = new DataSet();
DataTable dt = new DataTable();
theDataAdapter.Fill(dt);
return dt.DefaultView;
}
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.Message);
throw;
}
}


اگه Exception رخ نداد :
dg.DataSource =
Read_Excel_File(@"C:\Users\Mehdi\Desktop\sahmiye.xlsx");

sirvan-me
جمعه 19 خرداد 1391, 09:41 صبح
مرسی ... بابت راهنماییتون ... من ویندوز 7 استفاده می کنم ... کد Vb اجرا میشه ... اما کد شما .... من فقط مشکلم سر اینه که نمی خوام خودم اسم Sheet رو وارد کنم ... میخوام مثل کدی که تو پست اول گذاشتم خود به خود اسم Sheet رو تشخیص بده ... ممنون میشم اگه راهنمایی کنید .
در ضمن شما Dataset رو تعریف کردین اما کجای برنامتون استفاده کردین ؟!!!!!

Saeed_m_Farid
جمعه 19 خرداد 1391, 13:16 عصر
معنی اون ... ها رو نفهمیدم! کد من چی؟ شما تو تابع Read_Excel_File (http://barnamenevis.org/showthread.php?344558-%DA%A9%D8%AF-%D9%85%D8%B9%D8%A7%D8%AF%D9%84-%D8%A8%D8%A7-%D8%A7%DB%8C%D9%86-%D9%82%D8%B7%D8%B9%D9%87-%DA%A9%D8%AF-Vb-%D8%AF%D8%B1-C&p=1521381&viewfull=1#post1521381) لازم نیست نام Sheet وارد کنید! فقط مسیر فایل اکسل رو بهش میدین و همونطورکه تو summary تابع نوشتم اون DefaultView مربوط به اولین Sheet رو بهتون برمیگردونه:


Getting the first sheet from an Excel document regardless of sheet name with OleDb
شما کافیه خروجی رو بدین به DataSource گریدتون، که مثالش رو هم گذاشتم، احتمالاً System.Data.OleDb (http://msdn.microsoft.com/en-us/library/6d9ew87b%28v=vs.71%29) یا System.Data (http://msdn.microsoft.com/en-us/library/ax3wd0k9) رو use نکردین.
ضمناً درسته اون Dataset اضافه است، ممنون از تذکرتون.