民间!我正在编写一个程序,通过selenium web驱动程序从网站获取数据。我正在尝试为我们的项目创建足球装备。到目前为止,我完成了从网站上获取日期和时间,团队名称和分数。一两天前,我问有没有办法把数据写入excel文件。我试过epplus,但它不容易使用,所以我开始使用Interop,我有几个问题。
首先,我需要检查我的文件是否存在。另外,我需要访问当前的工作表。然后,我需要检查第一行项是否存在。如果它不存在,我需要在索引1中插入一个新行。我不确定我做得对:
using Excel = Microsoft.Office.Interop.Excel; //namespace
var filePath = new FileInfo(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) +
"\\Test" + "\\" + pathName + "\\" + subFile + "\\" + pathName + ".xlsx");
Excel.Application xlApp = new Excel.Application();
xlApp.Visible = true;
object misValue = System.Reflection.Missing.Value;
string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Test" + "\\" + pathName + "\\" + subFile + "\\" + pathName + ".xlsx";
if (filePath.Exists)
{
Excel.Workbook wb = xlApp.Workbooks.Open(path,0, false, misValue, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
Excel.Worksheet ws = (Excel.Worksheet)wb.Worksheets.Item["Sheet1"];
for (int i = 0; i < dateTime.Count; i++)
{
if (string.Compare(ws.Cells[i + 1, 1], dateTime[dateTime.Count - i -1]) != 0 && string.Compare(ws.Cells[i + 1, 2], firstTeam[dateTime.Count - i - 1]) != 0 && string.Compare(ws.Cells[i + 1, 3], secondTeam[dateTime.Count - i - 1]) != 0)
{
ws.Cells.Rows.Insert(0);
ws.Cells[1, 1] = dateTime[dateTime.Count - i - 1];
ws.Cells[1, 2] = firstTeam[dateTime.Count - i - 1];
ws.Cells[1, 3] = secondTeam[dateTime.Count - i - 1];
}
}
}
我正在尝试检查行上的数据,但我无法完成。我的如果条件不起作用我收到此错误:best overloaded method match for 'string.Compare(string, string)' has some invalid arguments'
我该怎么办?另外,我的代码是对的吗?
答案 0 :(得分:1)
好的,首先,我在使用标题import org.neo4j.spark._
import org.apache.spark.graphx._
import org.apache.spark.graphx.lib._
val neo = Neo4j(sc)
// load graph via Cypher query
val graphQuery = """MATCH (n)-[b]-(a) where b.NodeType = "Technology" return n,b,a"""
val graph: Graph[Long, String] = neo.rels(graphQuery).partitions(7).batch(200).loadGraph
graph.vertices.count <--- ERROR
时看不到.Value
因此,我想,没有任何用法。但是,当我尝试使用它时,它没有发生任何错误,我的代码完美运行。
更新版本:
using Excel = Microsoft.Office.Interop.Excel;
答案 1 :(得分:0)
String.Compare()有一些重载方法,你可以在这里查看:https://msdn.microsoft.com/en-us//library/system.string.compare(v=vs.110).aspx
所以,你应该在其中传递两个字符串,但是你传递了Cells和dateTime,Cells和firstTeam以及Cells和secondTeam。因此,您需要将它们带到相同类型的System.String。我更喜欢String.Equals()(https://msdn.microsoft.com/en-us//library/1hkt4325(v=vs.110).aspx),而不是String.Compare(),因为String.Equals()返回boolean,所以没有必要将它与0进行比较。假设我不知道哪个类型是dateTime,fisrtTeam和secondTeam对象,例如,您的if条件可能如下所示:
if (string.Equals(ws.Cells[i + 1, 1].Value.ToString(), dateTime[dateTime.Count - i -1].ToString()) && string.Equals(ws.Cells[i + 1, 2].Value.ToString(), firstTeam[dateTime.Count - i - 1].ToString()) && string.Equals(ws.Cells[i + 1, 3].Value.ToString(), secondTeam[dateTime.Count - i - 1]).ToString())
当然,你应该避免写出这样的长期条件,因为你可以轻易错过一些东西。
另外:在if体内,你将Cells分配给dateTime,firstTeam和secondTeam,它们可能是不同的类型。所以,它可能会失败。