首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

急新手EXCEL操作和创建文件夹有关问题,详见内容

2013-07-11 
急!新手求助EXCEL操作和创建文件夹问题,详见内容。新手刚学编程碰到个问题不知怎么解决,具体是这样的:现在

急!新手求助EXCEL操作和创建文件夹问题,详见内容。
新手刚学编程碰到个问题不知怎么解决,具体是这样的:

现在有一个EXCEL表1,A列是地州名称,B列是区县名称,C列是乡镇名称,D列是村名。
另外有一个EXCEL表2,是已经设计好的表格,其中的A列留空。

1.首先需要根据表1的内容建立多级文件夹,在根目录下,第一级是地州文件夹,然后地州里包含区县,最后区县里包含乡镇。
2.在每一个乡镇文件夹中放入一个表2,要求A列中填入该乡镇所属的村名称。

以上。

我只会简单的读取EXCEL或者建个文件夹,关键是怎么根据表1的内容去判断和指定创建多级文件夹,还要提出一个乡镇对应的所有村名称,写入到另一个EXCEL的指定列中,这个实在是不会写。

事情紧急,身边也没有编程厉害的人指导,求各位帮帮忙!急新手EXCEL操作和创建文件夹有关问题,详见内容
[解决办法]
你应该会啊。

你首先会把Excel读取成DataTable吗?


 #region 导入Excel数据相关函数

        /// <summary>
        /// 根据文件名获得Excel的工作薄名称
        /// </summary>
        /// <param name="excelFileName"></param>
        /// <returns></returns>
        public static IList<string> GetExcelTablesName(string excelFileName)
        {
            using (OleDbConnection olbDbConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + excelFileName + ";Extended Properties = "Excel 8.0;HDR=YES;IMEX=1;""))
            {
                try
                {
                    olbDbConn.Open();
                    DataTable ExcelTableNames = olbDbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
                    IList<string> tableList = new List<string>();


                    foreach (DataRow dr in ExcelTableNames.Rows)
                    {
                        tableList.Add((string)dr["TABLE_NAME"]);
                    }
                    return tableList;
                }

                catch (Exception ex)
                {
                    return null;
                }
                finally
                {
                    olbDbConn.Close();
                    olbDbConn.Dispose();
                }
            }
        }

        /// <summary>
        /// 根据文件名、工作薄名称获得数据表
        /// </summary>
        /// <param name="excelFileName"></param>
        /// <param name="tablesName"></param>
        /// <returns></returns>
        public static DataTable GetExcelDataTable(string excelFileName, string tablesName)
        {
            using (OleDbConnection olbDbConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + excelFileName + ";Extended Properties = "Excel 8.0;HDR=YES;IMEX=1;""))


            {
                try
                {
                    string sql = "SELECT * FROM [{0}]";

                    olbDbConn.Open();
                    OleDbDataAdapter da = new OleDbDataAdapter();
                    System.Data.DataSet ds = new System.Data.DataSet();
                    DataTable dtExcelData = null;
                    da.SelectCommand = new OleDbCommand(string.Format(sql, tablesName), olbDbConn);
                    da.Fill(ds, tablesName);
                    return ds.Tables[tablesName];
                }

                catch (Exception ex)
                {
                    return null;
                }
                finally
                {
                    olbDbConn.Close();
                    olbDbConn.Dispose();
                }
            }
        }


        public static void ResetColumnTypeByString(DataTable dt, string columnName)
        {
            string TempColumnName = "temp";
            if (dt.Columns.Contains(columnName) && dt.Columns[columnName].DataType != Type.GetType("System.String"))
            {
                dt.Columns.Add(TempColumnName, Type.GetType("System.String"));
                try
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        dr[TempColumnName] = dr[columnName].ToString();
                    }
                    dt.Columns.Remove(columnName);
                    dt.Columns[TempColumnName].ColumnName = columnName;
                }
                catch (Exception ex)
                {
                    dt.Columns.Remove(TempColumnName);
                    throw ex;
                }
            }
        }
        #endregion



上面是导入,然后对DataTable循环遍历
foreach(DataRow in dt.rows)
{
string str = string.empty;//临时存放文件夹路径


   for(int i=0;i<dt.columns;i++)
  {
   str = str + dr[i].tostring();
    按顺序取第i列,然后看有没有存在该文件夹
   如果没有则新建
    如果有则跳过
  }
}

判断文件夹存在与否你应该会吧,建议文件夹呢?
[解决办法]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Excel = Microsoft.Office.Interop.Excel;
using System.Globalization;

using System.Windows.Forms;

namespace Print
{
    public class ExcelExport
    {
        public static void saveOnExcel(String strPath, int StartFrequency, int EndFrequency, float FreqStep, double QualityFactor,
            double Bandwidth, double ResonantFreq, double ResonantImped, double ResonantPhase,
            double AntiFreq, double AntiImped, double AntiPhase)
        {
            System.Globalization.CultureInfo ciBack = System.Threading.Thread.CurrentThread.CurrentCulture;
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
            Excel.Application xlApp;
            Excel.Workbook xlWorkBook;
            Excel.Worksheet xlWorkSheet;
            object misValue = System.Reflection.Missing.Value;

            xlApp = new Excel.ApplicationClass();
            xlWorkBook = xlApp.Workbooks.Add(misValue);

            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
            xlWorkSheet.Cells[1, 1] = "开始";
            xlWorkSheet.Cells[2, 1] = "停止";
            xlWorkSheet.Cells[3, 1] = "间隔";



            xlWorkSheet.Cells[5, 1] = "品质因素";
            xlWorkSheet.Cells[6, 1] = "频带宽度";
            xlWorkSheet.Cells[7, 1] = "谐振频率";
            xlWorkSheet.Cells[8, 1] = "谐振阻抗";
            xlWorkSheet.Cells[9, 1] = "谐振相位";
            xlWorkSheet.Cells[10, 1] = "抗谐振频率";
            xlWorkSheet.Cells[11, 1] = "抗谐振阻抗";
            xlWorkSheet.Cells[12, 1] = "抗谐振相位";

            xlWorkSheet.Cells[1, 3] = "" + StartFrequency;
            xlWorkSheet.Cells[2, 3] = "" + EndFrequency;
            xlWorkSheet.Cells[3, 3] = "" + FreqStep.ToString("#0.0");

            xlWorkSheet.Cells[5, 3] = "" + QualityFactor.ToString("#0.0");
            xlWorkSheet.Cells[6, 3] = "" + Bandwidth.ToString("#0.0");
            xlWorkSheet.Cells[7, 3] = "" + ResonantFreq;
            xlWorkSheet.Cells[8, 3] = "" + ResonantImped;
            xlWorkSheet.Cells[9, 3] = "" + ResonantPhase.ToString("#0.0");
            xlWorkSheet.Cells[10,3] = "" + AntiFreq;
            xlWorkSheet.Cells[11,3] = "" + AntiImped;
            xlWorkSheet.Cells[12,3] = "" + AntiPhase.ToString("#0.0");


            xlWorkSheet.Cells[1, 5] = "kHz";
            xlWorkSheet.Cells[2, 5] = "kHz";
            xlWorkSheet.Cells[3, 5] = "kHz";



            xlWorkSheet.Cells[5, 5] = "Q";
            xlWorkSheet.Cells[6, 5] = "%";
            xlWorkSheet.Cells[7, 5] = "kHz";
            xlWorkSheet.Cells[8, 5] = "Ohm";
            xlWorkSheet.Cells[9, 5] = "Deg";
            xlWorkSheet.Cells[10, 5] = "kHz";
            xlWorkSheet.Cells[11, 5] = "Ohm";
            xlWorkSheet.Cells[12, 5] = "Deg";



            xlWorkBook.SaveAs(strPath, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
            xlWorkBook.Close(true, misValue, misValue);
            xlApp.Quit();

            releaseObject(xlWorkSheet);
            releaseObject(xlWorkBook);
            releaseObject(xlApp);


            System.Threading.Thread.CurrentThread.CurrentCulture = ciBack;

        }        
        private static void releaseObject(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch (Exception ex)
            {


                obj = null;
                MessageBox.Show("Exception Occured while releasing object " + ex.ToString());
            }
            finally
            {
                GC.Collect();
            }
        }

    }
}
实话是本来不想给你代码的,不过算了,这个是完全码,自己去修改吧,如果不会我就不想说什么了。

热点排行