精华内容
下载资源
问答
  • Revit二次开发_将数据导入Excel

    千次阅读 2018-10-07 18:17:20
    有时需要Revit模型的一些信息提取到Excel中进行处理或者是作为记录进行储存,但也许是因为Revit的数据结构相对复杂,并不支持直接将数据导出Excel,所以平时通过二次开发信息输出到Excel中。 常使用的输出方法...

    有时需要将Revit模型的一些信息提取到Excel中进行处理或者是作为记录进行储存,但也许是因为Revit的数据结构相对复杂,并不支持直接将数据导出Excel,所以平时通过二次开发将信息输出到Excel中。

    常使用的输出方法有三个,分别是com组件;NPOI库;Epplus库。

    com组件需要电脑安装Excel软件,由于Excel版本比较多,导出的时候要注意版本的问题。下面的代码通过com组件的方法导出模型中的一张明细表。

    //使用Excel2013,引用Microsoft Excel 15.0 Object Library
    
    using Autodesk.Revit.DB;
    using Autodesk.Revit.UI;
    using Autodesk.Revit.Attributes;
    using System.IO;
    using System.Reflection;
    using EXCEL = Microsoft.Office.Interop.Excel;
    
    namespace RevitAddinTestClass
    {
        [Transaction(TransactionMode.Manual)]
        class ViewScheduleExport : IExternalCommand
        {
            public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
            {
                Document document = commandData.Application.ActiveUIDocument.Document;
    
                //获取项目中的一张门明细表
                FilteredElementCollector collector = new FilteredElementCollector(document);
                foreach (ViewSchedule vs in collector.OfClass(typeof(ViewSchedule)))
                {
                    if (vs.Name == "门明细表")
                    {
                        //Excel文件路径
                        string path = @"D:\LST\Test\ViewSchedule.xlsx";
                        //如文件已存在则删除
                        if (File.Exists(path)) File.Delete(path);
                        //创建Excel文件
                        object nothing = Missing.Value;
                        EXCEL.Application excelApplication = new EXCEL.ApplicationClass();
                        EXCEL.Workbook excelWorkBook = excelApplication.Workbooks.Add(nothing);
                        EXCEL.Worksheet excelWorkSheet = excelWorkBook.Sheets[1] as EXCEL.Worksheet;
    
                        //获取表格的行列数
                        int rows, cols;
                        TableSectionData data = vs.GetTableData().GetSectionData(SectionType.Body);
                        rows = data.NumberOfRows;
                        cols = data.NumberOfColumns;
    
                        //导入数据
                        for (int i = 0; i < rows; i++)
                        {
                            for(int j = 0; j < cols; j++)
                            {
                                EXCEL.Range cell = excelWorkSheet.Cells[i + 1, j + 1] as EXCEL.Range;
    
                                //获取明细表中的字符串
                                cell.Value = vs.GetCellText(SectionType.Body, i, j);
    
                                //表头字体设置为粗体
                                if (cell.Row == 1)
                                {
                                    cell.Font.Bold = true;
                                }
                                //添加边框线
                                cell.BorderAround2();
                            }
                        }
    
                        //保存文件
                        excelWorkBook.Close(true, path);
                        excelApplication.Quit();
                        excelApplication = null;
    
                        continue;
                    }
                }
    
                return Result.Succeeded;
            }
        }
    }

    NPOI与Epplus都是开源免费的,NPOI库用的比较少,因为它只支持03和07版的Excel,但它不需要电脑安装有Excel软件。下面的代码读取模型中的建筑标高,然后通过NPOI库在Excel中制作一个层高表。

    using System;
    using System.Collections.Generic;
    using System.IO;
    using Autodesk.Revit.DB;
    using Autodesk.Revit.UI;
    using Autodesk.Revit.Attributes;
    using NPOI.HSSF.UserModel;
    using NPOI.SS.UserModel;
    
    namespace RevitAddinTestClass
    {
        [Transaction(TransactionMode.Manual)]
        class LevelsScheduleExport : IExternalCommand
        {
            public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
            {
                Document document = commandData.Application.ActiveUIDocument.Document;
    
                //获取所有建筑标高
                Dictionary<double, string> levelDic = new Dictionary<double, string>();
                List<double> elevationList = new List<double>();
    
                FilteredElementCollector collector = new FilteredElementCollector(document);
                foreach(Level l in collector.OfCategory(BuiltInCategory.OST_Levels).WhereElementIsNotElementType())
                {
                    if (l.get_Parameter(BuiltInParameter.LEVEL_IS_BUILDING_STORY).AsInteger() == 1)
                    {
                        double elevation = Math.Round(UnitUtils.ConvertFromInternalUnits(l.Elevation, DisplayUnitType.DUT_METERS), 2);
                        string levelName = l.Name;
                        try
                        {
                            if (l.GetParameters("避难层")[0].AsInteger() == 1) levelName += "(避难层)";
                        }
                        catch
                        {
                            //to do
                        }
                        levelDic.Add(elevation, levelName);
                        elevationList.Add(elevation);
                    }
                }
    
                //按标高的高度排序
                elevationList.Sort();
    
                //Excel文件路径
                string path = @"D:\LST\Test\LevelSchedule.xls";
                //如文件已存在则删除
                if (File.Exists(path)) File.Delete(path);
                //创建Excel文件
                HSSFWorkbook excelWorkBook = new HSSFWorkbook();
                ISheet excelWorkSheet = excelWorkBook.CreateSheet("层高表");
                //格式
                ICellStyle cellStyle = excelWorkBook.CreateCellStyle();
                cellStyle.BorderLeft = BorderStyle.Thin;
                cellStyle.BorderTop = BorderStyle.Thin;
                cellStyle.BorderRight = BorderStyle.Thin;
                cellStyle.BorderBottom = BorderStyle.Thin;
                cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00");
                //表头
                IRow hRow = excelWorkSheet.CreateRow(0);
    
                ICell hCell0 = hRow.CreateCell(0);
                hCell0.SetCellValue("楼层");
                hCell0.CellStyle = cellStyle;
    
                ICell hCell1 = hRow.CreateCell(1);
                hCell1.SetCellValue("层高");
                hCell1.CellStyle = cellStyle;
    
                ICell hCell2 = hRow.CreateCell(2);
                hCell2.SetCellValue("标高(m)");
                hCell2.CellStyle = cellStyle;
    
                //计算高差并写入数据
                for (int i = 0; i < elevationList.Count; i++)
                {
                    double currentElve, upElve, height;
                    string currentLevel;
    
                    currentElve = elevationList[i];
                    currentLevel = levelDic[currentElve];
                    if (i == elevationList.Count - 1)
                    {
                        upElve = 0;
                        height = 0;
                    }
                    else
                    {
                        upElve = elevationList[i + 1];
                        height = upElve - currentElve;
                    }
    
                    //写入数据
                    IRow dRow = excelWorkSheet.CreateRow(i + 1);
    
                    ICell dCell0 = dRow.CreateCell(0);
                    dCell0.SetCellValue(currentLevel);
                    dCell0.CellStyle = cellStyle;
    
                    ICell dCell1 = dRow.CreateCell(1);
                    if (height == 0)
                    {
                        dCell1.SetCellValue("");
                    }
                    else
                    {
                        dCell1.SetCellValue(height);
                    }
                    dCell1.CellStyle = cellStyle;
    
                    ICell dCell2 = dRow.CreateCell(2);
                    dCell2.SetCellValue(currentElve);
                    dCell2.CellStyle = cellStyle;
                }
    
                //保存文件
                using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write))
                {
                    excelWorkBook.Write(fs);
                }
    
                return Result.Succeeded;
            }
        }
    }

    Epplus库也不需要电脑安装Excel,但只支持xlsx格式的excel文件,网上的一些评论是导出的效率及稳定性都比NPOI好,但由于没进行过非常大数据量的导出,所以暂时没有体现出来。 下面代码将模型中的管道信息按照一定的规则处理后导出到Excel中,然后在Excel中简单的做个数据透视即可获得对应的工程量。

    using System.IO;
    using Autodesk.Revit.DB;
    using Autodesk.Revit.UI;
    using Autodesk.Revit.Attributes;
    using Autodesk.Revit.DB.Plumbing;
    using OfficeOpenXml;
    using OfficeOpenXml.Style;
    
    namespace RevitAddinTestClass
    {
        [Transaction(TransactionMode.Manual)]
        class PipeSchedule : IExternalCommand
        {
            public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
            {
                Document document = commandData.Application.ActiveUIDocument.Document;
    
                //Excel文件路径
                string path = @"D:\LST\Test\PipeSchedule.xlsx";
                //如文件已存在则删除
                if (File.Exists(path)) File.Delete(path);
                //创建Excel文件
                ExcelPackage package = new ExcelPackage(new FileInfo(path));
                ExcelWorksheet excelWorkSheet = package.Workbook.Worksheets.Add("管道数据");
                //表头
                string[] hearName = { "Id", "系统", "项目名称", "材质", "规格", "连接方式", "单位", "工程量" };
                for(int i = 0; i< hearName.Length; i++)
                {
                    ExcelRange hCell = excelWorkSheet.Cells[1, i + 1];
                    hCell.Value = hearName[i];
                    //格式
                    hCell.Style.Font.Bold = true;
                    hCell.Style.Border.BorderAround(ExcelBorderStyle.Thin);
                }
    
                //获得所有管道数据
                List<object[]> pipeDataList = new List<object[]>();
                FilteredElementCollector collector = new FilteredElementCollector(document);
                foreach(Pipe p in collector.OfClass(typeof(Pipe)).WhereElementIsNotElementType())
                {
                    string pipeId, pipeSys, pipeItemName, pipeSize, pipeMaterial, pipeConnect, pipeUnit;
                    double pipeQuantity;
                   //系统缩写
                    string abbr = p.get_Parameter(BuiltInParameter.RBS_DUCT_PIPE_SYSTEM_ABBREVIATION_PARAM).AsString();
                    //读取数据
                    pipeId = p.Id.ToString();
                    pipeSys = GetPipeSys(abbr);
                    pipeItemName = p.get_Parameter(BuiltInParameter.RBS_PIPING_SYSTEM_TYPE_PARAM).AsValueString().Split('_')[1];
                    pipeSize = p.get_Parameter(BuiltInParameter.RBS_CALCULATED_SIZE).AsString().Split(' ')[0];
                    pipeMaterial = GetPipeMaterial(Convert.ToDouble(pipeSize), abbr);
                    pipeConnect=GetPipeConnect(Convert.ToDouble(pipeSize),pipeMaterial);
                    pipeUnit = "m";
                    pipeQuantity = UnitUtils.ConvertFromInternalUnits(p.get_Parameter(BuiltInParameter.CURVE_ELEM_LENGTH).AsDouble(), DisplayUnitType.DUT_METERS);
    
                    object[] pipeData = { pipeId, pipeSys, pipeItemName, pipeMaterial, "DN" + pipeSize, pipeConnect, pipeUnit, pipeQuantity };
                    pipeDataList.Add(pipeData);
                }
    
                //写入数据
                for(int i = 0; i < pipeDataList.Count; i++)
                {
                    object[] pipeData = pipeDataList[i];
                    for(int j = 0; j < pipeData.Length; j++)
                    {
                        ExcelRange dCell = excelWorkSheet.Cells[i + 2, j + 1];
                        dCell.Value = pipeData[j];
                        dCell.Style.Border.BorderAround(ExcelBorderStyle.Thin);
                    }
                }
    
                //保存
                package.Save();
                package.Dispose();
    
                return Result.Succeeded;
            }
    
            string GetPipeSys(string abbreviation)
            {
                Dictionary<string, string> sysDic = new Dictionary<string, string>();
                sysDic.Add("ZP", "消防系统");
                sysDic.Add("X", "消防系统");
                sysDic.Add("J", "给水系统");
                sysDic.Add("F", "排水系统");
                sysDic.Add("W", "排水系统");
    
                return sysDic[abbreviation];
            }
    
            string GetPipeMaterial(double pipeSize,string abbreviation)
            {
                string material = "未定义";
                switch (abbreviation)
                {
                    case "ZP":
                        material = "镀锌钢管";
                        break;
                    case "X":
                        material = "镀锌钢管";
                        break;
                    case "J":
                        if (pipeSize > 50)
                        {
                            material = "钢塑复合管";
                        }
                        else
                        {
                            material = "PP-R管";
                        }
                        break;
                    case "F":
                        material = "PVC-U管";
                        break;
                    case "W":
                        material = "PVC-U管";
                        break;              
                }
                return material;
            }
    
            string GetPipeConnect(double pipeSize,string material)
            {
                string connect = "未定义";
                switch (material)
                {
                    case "PVC-U管":
                        connect = "粘接";
                        break;
                    case "PP-R管":
                        connect = "热熔";
                        break;
                    case "钢塑复合管":
                        if (pipeSize > 65)
                        {
                            connect = "卡箍";
                        }
                        else
                        {
                            connect = "螺纹";
                        }
                        break;
                    case "镀锌钢管":
                        if (pipeSize > 65)
                        {
                            connect = "卡箍";
                        }
                        else
                        {
                            connect = "螺纹";
                        }
                        break;
                }
                return connect;
            }
        }
    }

    展开全文
  • 用VB将数据导入Excel文件中

    千次阅读 2005-09-09 00:45:00
    用VB将数据导入Excel文件中 Excel 是一个非常优秀的报表制作软件,用VBA可以控制其生成优秀的报表,本文通过添加查询语句的方法,即用Excel中的获取外部数据的功能数据很快地从一个查询语句中捕获到EXCEL中,比起往...
    用VB将数据导入Excel文件中 
    Excel 是一个非常优秀的报表制作软件,用VBA可以控制其生成优秀的报表,本文通过添加查询语句的方法,即用Excel中的获取外部数据的功能将数据很快地从一个查询语句中捕获到EXCEL中,比起往每个CELL里写数据的方法提高许多倍。

    将下文加入到一个模块中,屏幕中调用如下ExporToExcel("select * from table")则实现将其导出到EXCEL中

    Public Function ExporToExcel(strOpen As String)
    '*********************************************************
    '* 名称:ExporToExcel
    '* 功能:导出数据到EXCEL
    '* 用法:ExporToExcel(sql查询字符串)
    '*********************************************************
    Dim Rs_Data As New ADODB.Recordset
    Dim Irowcount As Integer
    Dim Icolcount As Integer

    Dim xlApp As New Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlSheet As Excel.Worksheet
    Dim xlQuery As Excel.QueryTable

    With Rs_Data
    If .State = adStateOpen Then
    .Close
    End If
    .ActiveConnection = Cn
    .CursorLocation = adUseClient
    .CursorType = adOpenStatic
    .LockType = adLockReadOnly
    .Source = strOpen
    .Open
    End With
    With Rs_Data
    If .RecordCount < 1 Then
    MsgBox ("没有记录!")
    Exit Function
    End If
    '记录总数
    Irowcount = .RecordCount
    '字段总数
    Icolcount = .Fields.Count
    End With

    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = Nothing
    Set xlSheet = Nothing
    Set xlBook = xlApp.Workbooks().Add
    Set xlSheet = xlBook.Worksheets("sheet1")
    xlApp.Visible = True

    '添加查询语句,导入EXCEL数据
    Set xlQuery = xlSheet.QueryTables.Add(Rs_Data, xlSheet.Range("a1"))

    With xlQuery
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = True
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .PreserveColumnInfo = True
    End With

    xlQuery.FieldNames = True '显示字段名
    xlQuery.Refresh

    With xlSheet
    .Range(.Cells(1, 1), .Cells(1, Icolcount)).Font.Name = "黑体"
    '设标题为黑体字
    .Range(.Cells(1, 1), .Cells(1, Icolcount)).Font.Bold = True
    '标题字体加粗
    .Range(.Cells(1, 1), .Cells(Irowcount + 1, Icolcount)).Borders.LineStyle = xlContinuous
    '设表格边框样式
    End With

    With xlSheet.PageSetup
    .LeftHeader = "" & Chr(10) & "&""楷体_GB2312,常规""&10公司名称:" ' & Gsmc
    .CenterHeader = "&""楷体_GB2312,常规""公司人员情况表&""宋体,常规""" & Chr(10) & "&""楷体_GB2312,常规""&10日 期:"
    .RightHeader = "" & Chr(10) & "&""楷体_GB2312,常规""&10单位:"
    .LeftFooter = "&""楷体_GB2312,常规""&10制表人:"
    .CenterFooter = "&""楷体_GB2312,常规""&10制表日期:"
    .RightFooter = "&""楷体_GB2312,常规""&10第&P页 共&N页"
    End With

    xlApp.Application.Visible = True
    Set xlApp = Nothing '"交还控制给Excel
    Set xlBook = Nothing
    Set xlSheet = Nothing

    End Function


    注:须在程序中引用'Microsoft Excel 9.0 Object Library'和ADO对象,机器必装Excel 2000

    本程序在Windows 98/2000,VB 6 下运行通过。
    展开全文
  • 在vue项目中实现 ECharts 图表数据导出excel 两种方式

    方法一
    Vue 将页面中表格数据导出excel
    一、需要安装三个依赖:

      npm install -S file-saver xlsx
      
      npm install -D script-loader
    

    二、项目中新建一个文件夹:(vendor—名字任取)

    里面放置两个文件Blob.js和 Export2Excel.js。
      
    链接:https://pan.baidu.com/s/1krRDSw6PHylWlg5yslwZGA 密码:qotw

    下载后直接将文件夹放到src目录下即可。

    三、在.vue文件中
      在methods里写这两个方法:其中list是表格的内容

     // 导出表格
    export2Excel() {
        require.ensure([], () => {
              let { exportJsonToExcel } = require('../../vendor/Export2Excel');
               // 表头
              let tHeader = ['序号', 'IMSI', 'MSISDN', '证件号码'];
              //表头对应字段名,要和下面数据key对应
              let filterVal = ['iAutoID', 'Address', 'AuctionDate', 'Area'];
              // 数据来源
              // let list = this.serachData;
              //模拟数据
               let list =  [
               {iAutoID: "4737", Address: "海门市海门镇南海路南、长江路东侧", AuctionDate: "0000-00-00", Area: ""},
               {iAutoID: "21337", Address: "上海市浦东新区东至:A13B-01地块,南至:A13B-01地块,西至:国展路,北至:A13B-01地块",Area: ""},
               {iAutoID: "17373", Address: "白马大道以东、建业路以北", AuctionDate: "0000-00-00", Area: ""},
                {iAutoID: "17271", Address: "黄陂区横店街川龙大道以东、横中路以北", AuctionDate: "0000-00-00", Area: "黄陂"},
                {iAutoID: "20577", Address: "南通市海门四甲镇东渐大道北侧、军工路南侧", AuctionDate: "0000-00-00", Area: ""},
                {iAutoID: "18929", Address: "奥诺斯特以东、黄河路以南", AuctionDate: "2018-09-21", Area: ""}]
                   let data = this.formatJson(filterVal, list); //数据格式化
                   var index1 = '资源列表';//导出时文件名
                   exportJsonToExcel(tHeader, data, index1); //导出文件
                  })
                },
                // 数据格式化
                formatJson(filterVal, jsonData){
                    return jsonData.map(v => filterVal.map(j => v[j]))
                },
    

    四、添加按钮导出调用export2Excel方法

    <el-button plain size="mini" @click="export2Excel" >导出数据</el-button>
    

    方法二
    将table标签,包括tr、td等对json数据进行拼接,将table输出到表格上实现,这种方法的弊端在于输出的是伪excel,虽说生成xls为后缀的文件,但文件形式上还是html,代码如下

    <template>
      <button @click="tableToExcel">导出</button>
    </template>
      
      <script>
    export default {
      data() {
        return {
          jsonData: [
            {
              name: "路人甲",
              phone: "123456",
              email: "123@123456.com"
            },
            {
              name: "炮灰乙",
              phone: "123456",
              email: "123@123456.com"
            },
            {
              name: "土匪丙",
              phone: "123456",
              email: "123@123456.com"
            },
            {
              name: "流氓丁",
              phone: "123456",
              email: "123@123456.com"
            }
          ]
        };
      },
      methods: {
        tableToExcel() {
          //要导出的json数据
    
          //列标题
          let str = "<tr><td>姓名</td><td>电话</td><td>邮箱</td></tr>";
          //循环遍历,每行加入tr标签,每个单元格加td标签
          for (let i = 0; i < jsonData.length; i++) {
            str += "<tr>";
            for (let item in jsonData[i]) {
              //增加\t为了不让表格显示科学计数法或者其他格式
              str += `<td>${jsonData[i][item] + "\t"}</td>`;
            }
            str += "</tr>";
          }
          //Worksheet名
          let worksheet = "Sheet1";
          let uri = "data:application/vnd.ms-excel;base64,";
    
          //下载的表格模板数据
          let template = `<html xmlns:o="urn:schemas-microsoft-com:office:office" 
          xmlns:x="urn:schemas-microsoft-com:office:excel" 
          xmlns="http://www.w3.org/TR/REC-html40">
          <head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet>
            <x:Name>${worksheet}</x:Name>
            <x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet>
            </x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]-->
            </head><body><table>${str}</table></body></html>`;
          //下载模板
          window.location.href = uri + base64(template);
        }
        //输出base64编码
        function base64 (s) { return window.btoa(unescape(encodeURIComponent(s))) }
      }
    };
    </script>
    
    

    方法三
    通过将json遍历进行字符串拼接,将字符串输出到csv文件,代码如下

    <template>
      <button @click="tableToExcel">导出</button>
    </template>
      
      <script>
    export default {
      data() {
        return {
          jsonData: [
            {
              name: "路人甲",
              phone: "123456",
              email: "123@123456.com"
            },
            {
              name: "炮灰乙",
              phone: "123456",
              email: "123@123456.com"
            },
            {
              name: "土匪丙",
              phone: "123456",
              email: "123@123456.com"
            },
            {
              name: "流氓丁",
              phone: "123456",
              email: "123@123456.com"
            }
          ]
        };
      },
      methods: {
        tableToExcel() {
          //列标题,逗号隔开,每一个逗号就是隔开一个单元格
          let str = `姓名,电话,邮箱\n`;
          //增加\t为了不让表格显示科学计数法或者其他格式
          for (let i = 0; i < jsonData.length; i++) {
            for (let item in jsonData[i]) {
              str += `${jsonData[i][item] + "\t"},`;
            }
            str += "\n";
          }
          //encodeURIComponent解决中文乱码
          let uri = "data:text/csv;charset=utf-8,\ufeff" + encodeURIComponent(str);
          //通过创建a标签实现
          let link = document.createElement("a");
          link.href = uri;
          //对下载的文件命名
          link.download = "json数据表.csv";
          document.body.appendChild(link);
          link.click();
          document.body.removeChild(link);
        }
      }
    };
    </script>
    
    
    展开全文
  • Java数据库数据导入EXCEL

    千次阅读 2015-12-17 14:28:57
    一般的数据库数据怎么导入excel中呢??这让人很疑惑,今天我找到了一个方法可以实现 需要导入一个第三方包下载地址 具体内容如下: 里面含有指导文档,index.html里面含有如何读取数据库文件到excel和excel数据到...

    一般的数据库数据怎么导入excel中呢??这让人很疑惑,今天我找到了一个方法可以实现

    需要导入一个第三方包下载地址

    具体内容如下:

    里面含有指导文档,index.html里面含有如何读取数据库文件到excel和excel数据到数据库中。


    主要用到一个包


    将这个包拷贝到项目里面就可以了。

    先做一个简单版本的helloword

    <span style="white-space:pre">	</span>public void mkexcel() throws Exception{
    		//首先在内存中建立好工作薄
    		HSSFWorkbook book =new HSSFWorkbook();//建立好工作薄
    		HSSFSheet sheet = book.createSheet("表一");//表单名以及表单
    		HSSFRow row=sheet.createRow(4);//创建行数	
    		HSSFCell cell=row.createCell(4);//创建列数
    		cell.setCellValue("大哥哥,加油!!");//将数据写到cell中去
    		//内存中建立可不行,必须要写到文件
    		FileOutputStream out =new FileOutputStream("a.xls");
    		book.write(out);
    	}
    	
    效果图:


    通过上面的简单实例,我们能发现,创建xls的文件类似于在网页中动态创建table表格类似点击打开链接

    1,建立工作薄

    2,薄建立表

    3,表建行

    4,行建列

    5,列里面设值


    有了上面的这个简单的介绍,现在开始导入数据库里面的内容

    1,我们必须从内存中建立工作薄

    <span style="font-size:18px; white-space: pre;">	</span><span style="font-size:24px;">HSSFWorkbook book =new HSSFWorkbook();</span>
     

    2,创建sheet的时候,我们需要指定sheet名,所有需要用到元数据得到database里面的table名

    Connection con =hibernateFactory2.getCon();//数据库连接成功

    DatabaseMetaData dmeta=con.getMetaData();//元数据

    
    
    <span style="font-size:24px;">ResultSet rs=dmeta.getCatalogs();//获得所有的数据库,但是为了方便,我们直接指定数据库名</span>
    

    3,获得table名,

    <span style="white-space:pre">		</span>String dName="hncu";
    		//获得数据库里面的表名,返回ResultSet 全部放在list中
    		ResultSet rs=	dmeta.getTables(dName, dName, null, new String[]{"TABLE"});
    		//放在list 中,为后面的sheet名
    		List<String > list =new ArrayList<String>();
    		while(rs.next())
    		{
    		<span style="white-space: pre;">	</span>list.add(rs.getString("TABLE_NAME"));//找出表名将其放入list 中
    		}


     4,开始建立sheet表单,同时采用元素据生成表头

    <span style="white-space:pre">	<span style="font-size:24px;">		</span></span><span style="font-size:24px;">for(String sheetname:list){
    			HSSFSheet sheet=book.createSheet(sheetname);//设置表单和表单名
    			String sql="select * from "+dName+"."+sheetname;//以数据库的名字.表名来获取
    			Statement st =con.createStatement();
    			ResultSet rs2=st.executeQuery(sql);
    			ResultSetMetaData rsmd=rs2.getMetaData();
    			int col =rsmd.getColumnCount();//获得有多少列
    			
    			//生成表单的第一行,表头
    			HSSFRow row0 =sheet.createRow(0);
    			for(int i=0;i<col;i++){
    				HSSFCell cell = row0.createCell(i);
    				cell.setCellValue(rsmd.getColumnName(i+1));
    			}</span>

     5,创建行和列以及设置行列的值

    <span style="white-space:pre">			</span>int idx=1;//用来生成行
    			//第一头部分完成
    			
    			//完成第二部分
    			while(rs2.next()){
    				HSSFRow row =sheet.createRow(idx++);//一行创建完成,开始创建列
    				for(int i =0 ;i<col;i++){
    					HSSFCell cell =row.createCell(i);
    					cell.setCellValue(rs2.getString(i+1));
    				}
    			}
    		}


    6,存到文件

    	<span style="white-space:pre">	</span><span style="font-size:24px;">FileOutputStream out =new FileOutputStream("db.xls");
    <span style="white-space:pre">	</span>  book.write(out);//采用book来进行写</span>

    能直接运行的代码

    public void Test3() throws Exception{
    		/*
    		 * 要先得到数据库里面的数据,我们必须采用元数据,获得想关的内容
    		 * 要是直接运行,需要导包 建立数据库,查看的生成后文件在和根目录src同级
    		 */
    		
    		//先从内存中的数据建立
    		HSSFWorkbook book =new HSSFWorkbook();
    		Connection con =hibernateFactory2.getCon();//数据库连接
    		DatabaseMetaData dmeta=con.getMetaData();//元素据
    //		ResultSet rs=dmeta.getCatalogs();//获得所有的数据库
    		String dName="hncu";
    		//获得数据库里面的表名,返回ResultSet 全部放在list中
    		ResultSet rs=	dmeta.getTables(dName, dName, null, new String[]{"TABLE"});
    		//放在list 中,为后面的sheet名
    		List<String > list =new ArrayList<String>();
    		while(rs.next())
    		{
    			list.add(rs.getString("TABLE_NAME"));//找出表名将其放入list 中
    		}
    		for(String sheetname:list){
    			HSSFSheet sheet=book.createSheet(sheetname);//设置表单和表单名
    			String sql="select * from "+dName+"."+sheetname;//以数据库的名字.表名来获取
    			Statement st =con.createStatement();
    			ResultSet rs2=st.executeQuery(sql);
    			ResultSetMetaData rsmd=rs2.getMetaData();
    			int col =rsmd.getColumnCount();//获得有多少列
    			
    			//生成表单的第一行
    			HSSFRow row0 =sheet.createRow(0);
    			for(int i=0;i<col;i++){
    				HSSFCell cell = row0.createCell(i);
    				cell.setCellValue(rsmd.getColumnName(i+1));
    			}
    			int idx=1;
    			//第一头部分完成
    			
    			//完成第二部分
    			while(rs2.next()){
    				HSSFRow row =sheet.createRow(idx++);//一行创建完成,开始创建列
    				for(int i =0 ;i<col;i++){
    					HSSFCell cell =row.createCell(i);
    					cell.setCellValue(rs2.getString(i+1));
    				}
    			}
    		}
    		FileOutputStream out =new FileOutputStream("db.xls");
    		book.write(out);


    就这样就将数据全部导入到excel里面了

    效果图:

    数据库中的数据


    导出的excel的数据


    能够完全导出来,但是在实验的时候,数据库类型为blob类型的不能导出,因为excel 的每个单元格的数据不支持那么大的。

    有什么问题,大家一起提出来,共同讨论下。谢谢


    展开全文
  • 本经验是教大家如何TXT文档数据导入Excel表格,方便继续进行数据编辑和分析。 工具/原料 TXT文档数据 EXCEL;本经验以Microsoft office Excel 2016为例 方法/步骤 1 首先要有txt文档数据,...
  • C#怎样通过代码实现讲数据导入excel表并excel设置为只读模式,目前写入数据没问题,关键就是怎么设为只读
  • 好基友做调查问卷,已经统计到了word里面,需要将数据导入excel里,其实应该有比较方便的方法(比如从excel里直接导入什么的),但是我查了查txt导入到excel里所需的格式跟她已经整理出来的格式差的比较大,而且她...
  • C#将数据导入excel文件

    千次阅读 2019-01-07 15:49:05
    最近在做一个工具,需要Excel表中的数据读取出来,然后筛选过后导入一个新的Excel文件中,做这个工具的时候遇到两个问题,就自己记录一下防止忘记。 其中一个是读取Excel文件的时候只能读取....后面在导入excel...
  • 用pythontxt文本中的数据导入excel

    千次阅读 2020-05-06 22:40:10
    前几天货金小组课程报告,组长派了个任务让把paper中的表格数据做成突表,实在是懒得一个个数据手敲上excel,寻思着能不能写个小代码直接导入excel【结果本菜鸡捣鼓了超久,菜鸡本菜】 from openpyxl import ...
  • 本节课为您演示,如何网页中的表格,导入到工作表中。首先点击数据选项卡,显示数据功能面板。 2. 接着点击[获取外部数据]按钮,打开[获取外部数据]面板。 3. 在弹出的获取外部数据选项面板中,选择第二个[自...
  • SQL server 导入Excel数据

    万次阅读 2018-06-07 16:43:33
    SQL server 导入Excel数据编辑:洪伟富 2018-06-07第一步:对表格数据的处理,这一列数据中有数字,又有中文。如果不做处理,导入数据库会默认为float,从而导致“公教楼201”等字符全部为null。解决办法:用筛选功能...
  • QGIS导入excel数据

    千次阅读 2020-05-07 23:06:28
    QGIS导入excel数据
  • 数据库 导入Excel数据

    万次阅读 2019-09-24 18:14:16
    一、准备。 1、Excel内容。 2、数据库。 ...3、excel中没有id的值,但是我们又想主键是32位...3、第一个数据行代表的意思是在Excel中真正有意义的行数,别标题行包括进去。 4、选择目标表。 5、将Excel表...
  • MSHFLEXGRID表格中数据导入Excel方法

    千次阅读 2011-08-12 15:19:57
    机房收费系统在缓慢的进行着,很多功能都需要一点一点的实现,通过上网查找一些实现功能的方法,也都实现了,这个是实现MSHFLEXGRID表格中数据导入Excel中,方便保存起来和对数据进行处理。  实现这个导入数据...
  • C#将数据批量导入EXCEL的方法

    千次阅读 2019-04-22 11:30:59
    作为一个资深小白,用C#数据批量导入到...方法2:引用Microsoft.Office.Interop.Excel,引用—添加引用—com里找这个dll,接下来就是数据导入,按单元格导入很慢,按行导入稍快点儿,最快的是所有数据变成一...
  • Navicat导入Excel数据

    万次阅读 2018-10-17 13:55:14
    今天在做项目时,需要将excel数据导入的mysql表中。本来想自己写一个读取Excel数据并输出成sql语句的工具类,在查阅资料时发现Navicat然就可以实现,所以就偷个懒使用这个便捷的工具。当然在导入过程中遇到了...
  • 原标题:如何将Excel导入Python之中呢?如何将Excel导入Python之中呢?...大概的流程是这样的:1、导入模块import xlrd2、打开Excel文件读取数据data = xlrd.open_workbook('excel.xls')3、获取一个工作...
  • 效果如下: 1:开始页面 ...5:选中一个excel文件,点击导入Excel按钮,提示导入的数据信息: 6:注意事项以及代码如下:注:1:后台代码72行,文件的存储位置:必须在webapp下建立upload/excel。
  • 在finereport报表导入Excel往数据库插入数据,里面又4条数据实际插入和显示只有一条
  • matlab导入excel数据

    万次阅读 多人点赞 2017-09-10 21:23:41
    本文主要介绍用matlab的界面操作直接导入数据: 1、得到mat文件 首先当然打开matlab:    看见工具栏那个导入数据按钮没?打开,然后会弹出文件选择对话框,选择你要处理的excel文件,这里我们选择Sample-1....
  • 将Excel数据导入MATLAB

    千次阅读 2018-02-08 15:59:37
    本文在MATLAB 2013a和Office 2013环境下向大家演示如何将Excel数据导入到MATLAB中,其他版本的MATLAB、OFFICE方法大同小异,一起来看一下1.待导入的矩阵结构的数据录入Excel中,录入时注意行列要跟原矩阵一一对应2...
  • plsql导入excel数据

    万次阅读 2018-05-10 14:42:05
    LSQL Developer导入Excel数据最近处理Excel数据导入Oracle的工作比较多。参考了网上一些资料以及遇到的一些问题,整理了一下。具体的导入操作如下:第一个坑:当使用默认的Excel Files点击连接时会报 [AnyDAC]...
  • 今天被一个澳大利亚的朋友问到一个编程题,下列题目的情况列举出来并制成Excel表格。 a有6种情况,b有6种情况,c有6种情况,因此一共有6×6×6 = 216种情况。 #include <stdio.h> #include <cstdio&...
  • C#List中的数据导入Excel文件中

    千次阅读 2016-12-24 08:46:52
    今天描述一下如何List中的数据导入Excel中。我的实现是根据下面的博客进行改进的,这里给出原来博客的内容。  由于是Excel文件,所以要用到Office相关的dll,故请添加相应dll的引用,然后在程序中添加如下命名...
  • springboot导入Excel数据

    千次阅读 2019-08-29 09:38:25
    只适用于没有校验的数据导入 依赖jar包 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.0</version> </...
  • Oracle导入Excel数据

    千次阅读 2019-05-12 20:38:32
    ODBC Excel驱动程序登录失败:外部表不是预期的格式。 解决方法:在C:\Windows\SysWOW64,找到odbcad32.exe打开,按图操作 导入excel数据的步骤
  • 数据库:MySQL Workbench导入excel数据

    千次阅读 2019-04-05 00:10:45
    使用MySQL Workbench给表格导入excel数据 一般导入的数据excel表文件为csv格式。 选中要导入数据的数据库或表格,右键选择Table Data Import Wizard 选择要导入的csv文件,点击next 选择数据要导入导哪个表...
  • Python实现数据库数据导入Excel

    千次阅读 2017-03-06 18:53:47
    之前已经使用SchemaSpy工具分析了数据库的结构,之后就可以比较方便的将数据从数据库导出到Excel等文件中,这次我选择使用Python来完成这个工作。
  • DBVisualizer导入excel数据

    千次阅读 2020-01-08 11:50:04
    1. 找到数据对应用户下的...3. 选择导入excel,下一步; 4. 选择sheet,下一步; 5. 设置头部行数等配置信息,下一步; 6. 表格数据预览,下一步; 7. 设置表格列相关信息,下一步; 注:如第一次导入失...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 112,877
精华内容 45,150
关键字:

怎么将数据导入excel