sahar
چهارشنبه 17 آبان 1385, 10:15 صبح
Excel :
________________________________________
در این تاپیک خلاصه ای از مشکلات کار با اکسل و راه حل های آن را به همراه لینک های اصلی مورد استفاده می خوانید:
سوال 1 :
چگونه می توان یک فایل اکسل را خواند ؟
1- با استفاده از ابزارDCOM Excel
2- با استفاده ازOLEDB CONNECTION :
* توجه این روش امن تر ودر اجرا بسیار سریع تر است.
** فایلهای با فرمت غیز جدولی Non .XLS رابا این روش نمی توان بازکرد. برای حل این مشکل به سوال 4 مراجعه کنید.
Top Links:
http://support.microsoft.com/default.aspx?scid=kb;en-us;306023&Product=NETFrame
________________________________________
سوال 2 :
علت بروز خطای زیر هنگام باز کردن ٍExcel.WorkBooks چیست ؟
(Old Format Or Invalid Type Library)
این خطا به علت تنظیمات غیر انگلیسی در Reginal Setting اتفاق می افتد و برای حل آن به کد زیر توجه کنید:
کد:
System.Globalization.CultureInfo oldCI =
System.Threading.Thread.CurrentThread.CurrentCultu re;
System.Threading.Thread.CurrentThread.CurrentCultu re =
new System.Globalization.CultureInfo("en-US");
m_objBooks.Open(dataSourcePath + excelFileName ,m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_ob jOpt,m_objOpt, _objOpt,m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_objO pt,m_objOpt);
System.Threading.Thread.CurrentThread.CurrentCultu re =
oldCI;
________________________________________
سوال 3 :
چگونه می توان همه حافظه اشغال شده توسط Excel.Application و سایر کلاس های آن را آزاد کرد؟
باید توجه کنیم که با بستن و نال کردن متغیر های ابزار اکسل حافظه اشغال شده آن آزاد نمی شود . بلکه استفاده از ابزار های زیر برای آزاد سازی حافظه ضروری ست :
کد:
m_objBook.Close(false, m_objOpt, m_objOpt);
m_objBooks.Close();
m_objExcel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComO bject (m_objBook);
System.Runtime.InteropServices.Marshal.ReleaseComO bject (m_objBooks);
System.Runtime.InteropServices.Marshal.ReleaseComO bject (m_objExcel);
m_objBook=null;
m_objBooks=null;
m_objExcel=null;
GC.Collect(); // force final cleanup!
_________________
________________________________________
4- چگونه می توان سایر فرمت های فایل های اکسل مثل .csv را به فرمت XLS تبدیل کرد؟
باباز کردن آن توسط ٍExcel.WorkBooks و ذخیره مجدد آن در دستورات زیر:
کد:
m_objBooks.Open(dataSourcePath + excelFileName ,m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_ob jOpt,m_objOpt,
m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_obj Opt,m_objOpt);
m_objBook = m_objExcel.ActiveWorkbook;
// Save the text file in the typical workbook format and quit Excel.
m_objBook.SaveAs(dataSourcePath+"Temp.XLS", Excel.XlFileFormat.xlWorkbookNormal,
m_objOpt, m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt,
m_objOpt, m_objOpt, m_objOpt);
________________________________________
سوال 5 :
هنگام نیو کردن Excel.Application در محیط وب با خطای زیر روبرو می شویم ؟ علت و راه حل آن چیست ؟
(Access Denied)
علت : امکان دسترسی به این DCOM توسط ASP.NET وجود ندارد.
راه حل :باید در کامپیوتر سرور این اجازه دسترسی را صادر کنیم.
مراحل صدور این مجوز این است :
1- اجرای کامند روبرو در Run :dcomcnfg.exe
2-با باز شدن برنامه سرویس Component Services به زیر شاخه زیر می رویم :
Component Services => Computer => My Computer => DCOM Config
3-برنامه Microsoft Excel Application را از لیست پیدا می کنیم و پراپرتی های آن را با کلیک راست می آوریم.
4- اکنون زمان صدور مجوز برای ASPNET است.
در تب Security :
Access Permistion و Lunch Permistion را Customize می کنیم ویک گروه به نام ASPNET به لیست اضافه کرده و اجازه دسترسی آن را تیک می زنیم.
Top Link:
http://www.asp101.com/articles/jayram/exceldotnet/default.asp
در عنوان :Installing and running the sample:
_________________
________________________________________
سوال 6 :
وقتی با استفاده از ابزار JetEngine OLEDB یک فایل اکسل را می خوانیم سطر اول Sheet خوانده نمی شود .
علت و راه حل ان چیست ؟
علت این است که سطر اول را به طور پیش فرض نام ستون های جدول فرض میکند .
برای حل این مشکل در دات نت این فرمان را به ConnectionString اضافه می کنیم .(HDR=No):
ترکیب کلی ConnectionString چنین است :
کد:
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source="+ dataSourcePath + "Temp.XLS"+";Extended Properties='Excel 8.0;HDR=No;'";
Top Link :
http://www.codeproject.com/csharp/Excel2XML.asp
در عنوان :Connection to Excel using Jet Engine
_________________
________________________________________
سوال 7:
چگونه می توان نام شیت های اکسل را خواند ؟
با استفاده از تابع GetOleDbSchemaTable در OLE DB:
به قطعه کد زیر توجه کنید :
کد:
// parameter as appropriate for your environment.
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source="+ dataSourcePath + "Temp.XLS"+";Extended Properties='Excel 8.0;HDR=No;'";
// Create connection object by using the preceding connection string.
OleDbConnection objConn = new OleDbConnection(sConnectionString);
// Open connection with the database.
objConn.Open();
System.Data.DataTable dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables , null);
if(dt == null)
{
return null ;
}
String[] excelSheets = new String[dt.Rows.Count];
int i = 0;
// Add the sheet name to the string array.
foreach(DataRow row in dt.Rows)
{
excelSheets[i] = row["TABLE_NAME"].ToString();
i++;
}
_________________
________________________________________
یک شیوه عالی و بی درد سربرای خواندن فایلهای CSV
به جای استفاده از انواع Connection ها وCom ها وDcomها وDllها
می توانید راحت وسریع فایلهای Csv راباشی StreamReader در دات نت بخوانید:
به همین راحتی !!
کد:
DataSet ds = CreateDataSet();
String line;
//Open the CSV file to Read data From it
System.IO.StreamReader filestreamReader =
new System.IO.StreamReader(dataSourcePath + FileName);
while ((line = filestreamReader.ReadLine()) != null)
{
string[] strArray = ConvertCamaToArray(line );
AddRow(ds , strArray) ;
}
filestreamReader.Close();
return ds ;
_________________
________________________________________
در این تاپیک خلاصه ای از مشکلات کار با اکسل و راه حل های آن را به همراه لینک های اصلی مورد استفاده می خوانید:
سوال 1 :
چگونه می توان یک فایل اکسل را خواند ؟
1- با استفاده از ابزارDCOM Excel
2- با استفاده ازOLEDB CONNECTION :
* توجه این روش امن تر ودر اجرا بسیار سریع تر است.
** فایلهای با فرمت غیز جدولی Non .XLS رابا این روش نمی توان بازکرد. برای حل این مشکل به سوال 4 مراجعه کنید.
Top Links:
http://support.microsoft.com/default.aspx?scid=kb;en-us;306023&Product=NETFrame
________________________________________
سوال 2 :
علت بروز خطای زیر هنگام باز کردن ٍExcel.WorkBooks چیست ؟
(Old Format Or Invalid Type Library)
این خطا به علت تنظیمات غیر انگلیسی در Reginal Setting اتفاق می افتد و برای حل آن به کد زیر توجه کنید:
کد:
System.Globalization.CultureInfo oldCI =
System.Threading.Thread.CurrentThread.CurrentCultu re;
System.Threading.Thread.CurrentThread.CurrentCultu re =
new System.Globalization.CultureInfo("en-US");
m_objBooks.Open(dataSourcePath + excelFileName ,m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_ob jOpt,m_objOpt, _objOpt,m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_objO pt,m_objOpt);
System.Threading.Thread.CurrentThread.CurrentCultu re =
oldCI;
________________________________________
سوال 3 :
چگونه می توان همه حافظه اشغال شده توسط Excel.Application و سایر کلاس های آن را آزاد کرد؟
باید توجه کنیم که با بستن و نال کردن متغیر های ابزار اکسل حافظه اشغال شده آن آزاد نمی شود . بلکه استفاده از ابزار های زیر برای آزاد سازی حافظه ضروری ست :
کد:
m_objBook.Close(false, m_objOpt, m_objOpt);
m_objBooks.Close();
m_objExcel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComO bject (m_objBook);
System.Runtime.InteropServices.Marshal.ReleaseComO bject (m_objBooks);
System.Runtime.InteropServices.Marshal.ReleaseComO bject (m_objExcel);
m_objBook=null;
m_objBooks=null;
m_objExcel=null;
GC.Collect(); // force final cleanup!
_________________
________________________________________
4- چگونه می توان سایر فرمت های فایل های اکسل مثل .csv را به فرمت XLS تبدیل کرد؟
باباز کردن آن توسط ٍExcel.WorkBooks و ذخیره مجدد آن در دستورات زیر:
کد:
m_objBooks.Open(dataSourcePath + excelFileName ,m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_ob jOpt,m_objOpt,
m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_obj Opt,m_objOpt);
m_objBook = m_objExcel.ActiveWorkbook;
// Save the text file in the typical workbook format and quit Excel.
m_objBook.SaveAs(dataSourcePath+"Temp.XLS", Excel.XlFileFormat.xlWorkbookNormal,
m_objOpt, m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt,
m_objOpt, m_objOpt, m_objOpt);
________________________________________
سوال 5 :
هنگام نیو کردن Excel.Application در محیط وب با خطای زیر روبرو می شویم ؟ علت و راه حل آن چیست ؟
(Access Denied)
علت : امکان دسترسی به این DCOM توسط ASP.NET وجود ندارد.
راه حل :باید در کامپیوتر سرور این اجازه دسترسی را صادر کنیم.
مراحل صدور این مجوز این است :
1- اجرای کامند روبرو در Run :dcomcnfg.exe
2-با باز شدن برنامه سرویس Component Services به زیر شاخه زیر می رویم :
Component Services => Computer => My Computer => DCOM Config
3-برنامه Microsoft Excel Application را از لیست پیدا می کنیم و پراپرتی های آن را با کلیک راست می آوریم.
4- اکنون زمان صدور مجوز برای ASPNET است.
در تب Security :
Access Permistion و Lunch Permistion را Customize می کنیم ویک گروه به نام ASPNET به لیست اضافه کرده و اجازه دسترسی آن را تیک می زنیم.
Top Link:
http://www.asp101.com/articles/jayram/exceldotnet/default.asp
در عنوان :Installing and running the sample:
_________________
________________________________________
سوال 6 :
وقتی با استفاده از ابزار JetEngine OLEDB یک فایل اکسل را می خوانیم سطر اول Sheet خوانده نمی شود .
علت و راه حل ان چیست ؟
علت این است که سطر اول را به طور پیش فرض نام ستون های جدول فرض میکند .
برای حل این مشکل در دات نت این فرمان را به ConnectionString اضافه می کنیم .(HDR=No):
ترکیب کلی ConnectionString چنین است :
کد:
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source="+ dataSourcePath + "Temp.XLS"+";Extended Properties='Excel 8.0;HDR=No;'";
Top Link :
http://www.codeproject.com/csharp/Excel2XML.asp
در عنوان :Connection to Excel using Jet Engine
_________________
________________________________________
سوال 7:
چگونه می توان نام شیت های اکسل را خواند ؟
با استفاده از تابع GetOleDbSchemaTable در OLE DB:
به قطعه کد زیر توجه کنید :
کد:
// parameter as appropriate for your environment.
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source="+ dataSourcePath + "Temp.XLS"+";Extended Properties='Excel 8.0;HDR=No;'";
// Create connection object by using the preceding connection string.
OleDbConnection objConn = new OleDbConnection(sConnectionString);
// Open connection with the database.
objConn.Open();
System.Data.DataTable dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables , null);
if(dt == null)
{
return null ;
}
String[] excelSheets = new String[dt.Rows.Count];
int i = 0;
// Add the sheet name to the string array.
foreach(DataRow row in dt.Rows)
{
excelSheets[i] = row["TABLE_NAME"].ToString();
i++;
}
_________________
________________________________________
یک شیوه عالی و بی درد سربرای خواندن فایلهای CSV
به جای استفاده از انواع Connection ها وCom ها وDcomها وDllها
می توانید راحت وسریع فایلهای Csv راباشی StreamReader در دات نت بخوانید:
به همین راحتی !!
کد:
DataSet ds = CreateDataSet();
String line;
//Open the CSV file to Read data From it
System.IO.StreamReader filestreamReader =
new System.IO.StreamReader(dataSourcePath + FileName);
while ((line = filestreamReader.ReadLine()) != null)
{
string[] strArray = ConvertCamaToArray(line );
AddRow(ds , strArray) ;
}
filestreamReader.Close();
return ds ;
_________________